0
点赞
收藏
分享

微信扫一扫

GridLayout,LinearLayout,FlowLayout布局一组按钮或(radio checkbox)选项和并设置状态


说明:

在android中会用到一组选项布局的问题,可以使用GridLayout,LinearLayout,FlowLayout等多种布局。

如果容器内按钮或(radio checkbox)选项较多,使用LinearLayout就比较繁琐。

可使用GridLayout替换LinearLayout以便把多个选项放到一个容器内。但如果每个按钮长度不一致,就会造成对齐问题,有些列很长,有些列很短,这样布局长短便不好把握。

还有一种方式使用自定义的流式布局TagFlowLayout或WarpLinearLayout,实现自动换行效果。然而这种方式不直观,不能马上看到效果需要运行时才能看到。

综合来说,比较来比较去,还不是使用最简单的LinearLayout布局,把CheckBox集成多一个容器的操作有java代码完成。

LinearLayout布局如下:

<LinearLayout
android:id="@+id/cg_motorFunctionAssessment2"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:layout_gravity="center"
android:gravity="center|left"
android:orientation="vertical"
android:paddingLeft="@dimen/dp_15"
android:paddingRight="@dimen/dp_15"
tools:visibility="visible">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:gravity="left"
android:orientation="horizontal">


<CheckBox
android:id="@+id/cb_motorFunctionAssessment20"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:background="@drawable/selector_check_button"
android:button="@null"
android:checked="false"
android:gravity="center"
android:text="翻身"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment21"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:layout_marginLeft="@dimen/dp_10"

android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="坐"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment22"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="站"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment23"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="转移"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:gravity="left"
android:orientation="horizontal">

<CheckBox
android:id="@+id/cb_motorFunctionAssessment24"
android:layout_width="@dimen/dp_90"
android:layout_height="@dimen/dp_22"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="步行或驱动轮椅"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment25"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="上下台阶"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />
</LinearLayout>
</LinearLayout>

GridLayout布局可以这样:

<GridLayout
android:id="@+id/cg_motorFunctionAssessment2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="@dimen/dp_5"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginRight="@dimen/dp_15"
android:columnCount="4"
android:gravity="center|left"
android:orientation="horizontal"
android:useDefaultMargins="true"
tools:visibility="visible">


<CheckBox
android:id="@+id/cb_motorFunctionAssessment20"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/selector_check_button"
android:button="@null"
android:checked="false"
android:gravity="center"
android:text="翻身"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment21"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"

android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="坐"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment22"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"

android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="站"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment23"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"

android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="转移"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />


<CheckBox
android:id="@+id/cb_motorFunctionAssessment24"
android:layout_width="@dimen/dp_90"
android:layout_height="@dimen/dp_22"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="步行或驱动轮椅"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

<CheckBox
android:id="@+id/cb_motorFunctionAssessment25"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_22"
android:background="@drawable/selector_check_button"
android:button="@null"
android:gravity="center"
android:text="上下台阶"
android:textColor="@drawable/selector_check_button_color"
android:textSize="@dimen/sp_12" />

</GridLayout>

使用FlowLayout就不说了。

使用LinearLayout的方式如何进行查询操作?

如果使用最简单的LinearLayout布局,最重要的就是获取按钮集合,即便进行统一操作。

把直接处理的方式

CheckBox[] cbgMotorFunctionAssessment2 = {contentBinding.cbMotorFunctionAssessment20, contentBinding.cbMotorFunctionAssessment21
, contentBinding.cbMotorFunctionAssessment22, contentBinding.cbMotorFunctionAssessment23
, contentBinding.cbMotorFunctionAssessment24, contentBinding.cbMotorFunctionAssessment25
};

可以优化为

如果是一层LinearLayout也就是

<LinearLayout><CheckBox><CheckBox> </LinearLayout>的样式

public static CheckBox[] getCheckBoxGroup(LinearLayout cg) {
List<CheckBox> cbArray = new ArrayList<>();
int count = cg.getChildCount();
for (int i = 0; i < count; i++) {
View child = cg.getChildAt(i);
if (child instanceof CheckBox) {
cbArray.add ((CheckBox) child);
}
}
// 创建一个新的 String 类型的数组
// 数组长度和 ArrayList 长度一样
CheckBox[] arr = new CheckBox[cbArray.size()];
// 将ArrayList对象转换成数组
return cbArray.toArray(arr);
}

如果是两层LinearLayout也就是

<LinearLayout>

<LinearLayout><CheckBox><CheckBox> </LinearLayout>

<LinearLayout><CheckBox><CheckBox> </LinearLayout>

</LinearLayout>的样式

public static CheckBox[] getCheckBoxGroup2(LinearLayout cg) {
List<CheckBox> cbArray = new ArrayList<>();

int countLL = cg.getChildCount();
for (int j = 0; j < countLL; j++) {
View ll = cg.getChildAt(j);
if (ll instanceof LinearLayout) {
int count =((LinearLayout)ll ).getChildCount();
for (int i = 0; i < count; i++) {
View child = cg.getChildAt(i);
if (child instanceof CheckBox) {
cbArray.add ((CheckBox) child);
}
}
}
}
CheckBox[] arr = new CheckBox[cbArray.size()];
// 将ArrayList对象转换成数组
return cbArray.toArray(arr);
}

有了集合就可以进行特定操作,比如设置或者去数值,甚至可以模拟互斥。

public static void setCheckBoxesView(CheckBox[] cbArray, List<Integer> values) {

for (int i = 0; i < cbArray.length; i++) {
cbArray[i].setChecked(false);
}
if (values == null)
return;
for (Integer da : values) {
if (da == null || da < 0 || da >= cbArray.length)
continue;
for (int i = 0; i < cbArray.length; i++) {
if (da.intValue() == i) {//如果序号就是值
cbArray[da].setChecked(true);
}
}
}
}

public static List<Integer> getCheckBoxValues1(CheckBox[] cbArray) {
List<Integer> list = new ArrayList<Integer>();

for (int i = 0; i < cbArray.length; i++) {
if (cbArray[i].isChecked()) {
String tag = cbArray[i].getTag().toString();
list.add(Integer.valueOf(tag));
}
}
return list;
}

关于:

编者:李国帅


时间:2021-09-26  

举报

相关推荐

0 条评论