说明:
在android中会用到一组选项布局的问题,可以使用GridLayout,LinearLayout,FlowLayout等多种布局。
如果容器内按钮或(radio checkbox)选项较多,使用LinearLayout就比较繁琐。
可使用GridLayout替换LinearLayout以便把多个选项放到一个容器内。但如果每个按钮长度不一致,就会造成对齐问题,有些列很长,有些列很短,这样布局长短便不好把握。
还有一种方式使用自定义的流式布局TagFlowLayout或WarpLinearLayout,实现自动换行效果。然而这种方式不直观,不能马上看到效果需要运行时才能看到。
综合来说,比较来比较去,还不是使用最简单的LinearLayout布局,把CheckBox集成多一个容器的 *** 作有java代码完成。
LinearLayout布局如下:
GridLayout布局可以这样:
使用FlowLayout就不说了。
使用LinearLayout的方式如何进行查询 *** 作?
如果使用最简单的LinearLayout布局,最重要的就是获取按钮集合,即便进行统一 *** 作。
把直接处理的方式
CheckBox[] cbgMotorFunctionAssessment2 = {contentBinding.cbMotorFunctionAssessment20, contentBinding.cbMotorFunctionAssessment21 , contentBinding.cbMotorFunctionAssessment22, contentBinding.cbMotorFunctionAssessment23 , contentBinding.cbMotorFunctionAssessment24, contentBinding.cbMotorFunctionAssessment25 };
可以优化为
如果是一层LinearLayout也就是
public static CheckBox[] getCheckBoxGroup(LinearLayout cg) { ListcbArray = 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也就是
的样式
public static CheckBox[] getCheckBoxGroup2(LinearLayout cg) { ListcbArray = 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, Listvalues) { 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 getCheckBoxValues1(CheckBox[] cbArray) { List list = new ArrayList (); 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; }
关于:
编者:李国帅
qq:9611153 微信lgs9611153
时间:2021-09-26
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)