栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号