我正在尝试将五个左右的ImageView添加到RelativeLayout,每个新的ImageView都位于前一个的右侧。但是,我得到的(显然)所有这些都堆叠在一起,好像它们都是ALIGN_PARENT_LEFT。相关的代码段:
ImageView[] foo = new ImageView[levels];
for (int i = 0; i < levels; i++) {
foo[i] = new ImageView(context);
layoutFoo.addView(foo[i]);
foo[i].setId(10 + i);
if (i == 0) {
RelativeLayout.LayoutParams fooParams = (RelativeLayout.LayoutParams) foo[i].getLayoutParams();
fooParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
foo[i].setLayoutParams(fooParams);
} else {
RelativeLayout.LayoutParams fooParams = (RelativeLayout.LayoutParams) foo[i].getLayoutParams();
fooParams.addRule(RelativeLayout.RIGHT_OF, foo[i-1].getId());
foo[i].setLayoutParams(fooParams);
}
}
任何提示我做错了什么? ImageViews没有任何宽度(因为我还没有为它们分配位图),这对我们来说无关紧要,对吗?
编辑:问题原因是没有为ImageView设置高度和宽度。解决方案是使用setLayoutParams()或使用构造函数设置它们,如JustWork的示例所示。
答案 0 :(得分:-1)
您必须在设置属性后添加ImageView。
将此代码移至for循环的结尾:
layoutFoo.addView(foo[i]);
顺便说一句,你不需要ImageView[]
。您可以使用一个ImageView完成它。
<强>更新强>
以下是您可以执行相同操作的代码:
ImageView foo;
RelativeLayout.LayoutParams fooParams;
for (int i = 0; i < levels; i++) {
foo = new ImageView(context);
foo.setId(10 + i);
fooParams = (RelativeLayout.LayoutParams) foo.getLayoutParams(); // I don't understand why you are trying to get params of which hasn't been specified before.
// If I were you, I would do like:
fooParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
if (i == 0) {
fooParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
} else {
fooParams.addRule(RelativeLayout.RIGHT_OF, foo.getId()-1);
}
foo.setImageBitmap(yourBitmap); // Set bitmap.
foo.setLayoutParams(fooParams);
layoutFoo.addView(foo);
}
答案 1 :(得分:-1)
我认为放置这些图片的最简单方法是使用图库。虽然它已被弃用,但我认为这样做更好。