如何通过编程方式为LinearLayout for Android添加多个复选框?

时间:2015-03-20 11:37:09

标签: android android-layout checkbox android-linearlayout

我在我的XML中定义了一个ScrollView,我有一个VerticalLayout是Vertical(代码中引用为ll的那个,或者是ID pickmovieLL)

我想在垂直LinearLayout ll

下添加Horizo​​ntal LinearLayouts

我这样做是通过一个类型列表的for循环(使用它来获取复选框的文本),基本上我想在进入一个新行之前从左到右添加两个复选框(我找到了看起来每行只有1个有点奇怪的空白空间)

LinearLayout ll = (LinearLayout) findViewById(R.id.pickmovieLL);
            LinearLayout ll2;
            CheckBox ch;
            CheckBox ch2;
            for (int i = 0; i < genres.size(); i++)
            {

                if (genres.get(i) != null)
                {

                    ll2 = new LinearLayout(this);
                    ll2.setOrientation(LinearLayout.HORIZONTAL);
                    ll2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
                    ll2.setGravity(Gravity.CENTER);
                    ll2.setWeightSum(1);
                    ch = new CheckBox(this);
                    ch.setLayoutParams((new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1)));
                    ch.setText(genres.get(i).genreName);
                    ch.setId(genres.get(i).getGenreID());
                    ll2.addView(ch);

                }

                if (genres.size() - i > 1)
                {

                    ch2 = new CheckBox(this);
                    ch2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1));

                    ch2.setText(genres.get(i + 1).genreName);
                    ch2.setId(genres.get(i + 1).getGenreID());
                    ll2.addView(ch2);
                    i++;

                }

                ll.addView(ll2);

            }

我遇到的一个问题是,我列表中的5种类型中只有3种出现。名单是幻想,科幻,喜剧,戏剧和动作...只有科幻,戏剧和动作出现。 (我以前遇到的问题是它超出了列表的范围,因此我为什么要像这样增加for循环。),一遍又一遍地重复它并且无法弄清楚出了什么问题,使用了层次结构查看器而它只是显示它添加到了正确的LinearLayout,但只添加了一个,我无法弄清楚为什么第一个类型永远不会被添加,但是Action会出现在ch Checkbox下面(我感觉有什么东西会覆盖一些东西)也许,但不知道为什么会这样)。

已经检查了很多其他帖子来解决这个问题,我猜这个问题是由于想要一次性添加两个复选框而引起的。

1 个答案:

答案 0 :(得分:2)

你需要在setParameter中设置WRAP_CONTENT作为复选框Width,这是你犯了错误的第一个参数,如果在Horizo​​ntal LinearLayout中为组件分配MATCH_PARENT宽度,那么它就不会为其他组件留出空间