如何以编程方式将多个复选框添加到 Android 的 LinearLayout?
How to add multiple checkboxes to LinearLayout for Android programatically?
我在 XML 中定义了一个 ScrollView,我有一个垂直的 LinearLayout(代码中引用为 ll 或 ID pickmovieLL 的那个)
我想在垂直LinearLayout ll下添加Horizontal LinearLayouts
我通过一个流派列表的 for 循环来做到这一点(使用它来获取复选框的文本),基本上我想在换行之前从左到右添加两个复选框(我发现每行只有 1 的外观看起来有点奇怪 space)
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 种类型中只显示了三种。名单是幻想、科幻、喜剧、戏剧和动作……只有科幻、戏剧和动作出现。 (我以前遇到过它超出列表范围的问题,因此我为什么要像这样增加 for 循环。),一遍又一遍地检查它并且无法找出问题所在,使用了层次结构查看器并且它只是显示它已添加到正确的 LinearLayout,但只添加了一个,我无法弄清楚为什么从未添加第一种类型,但 Action 将位于 ch Checkbox 下方(我感觉有些东西可能正在覆盖某些东西,但不确定为什么会这样)。
查看了很多其他帖子来解决这个问题,我猜这个问题可能是因为想一次性添加两个复选框造成的。
好吧,你只需要在 setParameter 中为复选框宽度设置 WRAP_CONTENT,这是你出错的第一个参数,如果你在 Horizontal LinearLayout 中为组件分配 MATCH_PARENT 宽度,那么它不会为其他组件节省 space。
我在 XML 中定义了一个 ScrollView,我有一个垂直的 LinearLayout(代码中引用为 ll 或 ID pickmovieLL 的那个)
我想在垂直LinearLayout ll下添加Horizontal LinearLayouts
我通过一个流派列表的 for 循环来做到这一点(使用它来获取复选框的文本),基本上我想在换行之前从左到右添加两个复选框(我发现每行只有 1 的外观看起来有点奇怪 space)
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 种类型中只显示了三种。名单是幻想、科幻、喜剧、戏剧和动作……只有科幻、戏剧和动作出现。 (我以前遇到过它超出列表范围的问题,因此我为什么要像这样增加 for 循环。),一遍又一遍地检查它并且无法找出问题所在,使用了层次结构查看器并且它只是显示它已添加到正确的 LinearLayout,但只添加了一个,我无法弄清楚为什么从未添加第一种类型,但 Action 将位于 ch Checkbox 下方(我感觉有些东西可能正在覆盖某些东西,但不确定为什么会这样)。
查看了很多其他帖子来解决这个问题,我猜这个问题可能是因为想一次性添加两个复选框造成的。
好吧,你只需要在 setParameter 中为复选框宽度设置 WRAP_CONTENT,这是你出错的第一个参数,如果你在 Horizontal LinearLayout 中为组件分配 MATCH_PARENT 宽度,那么它不会为其他组件节省 space。