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

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

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

说明:

在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) {
        List 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也就是

的样式

  public static CheckBox[] getCheckBoxGroup2(LinearLayout cg) {
        List 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 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 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  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存