无法在RelativeLayout中以编程方式布局ImageView

时间:2013-09-04 00:52:42

标签: java android relativelayout

我正在尝试将五个左右的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的示例所示。

2 个答案:

答案 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)

我认为放置这些图片的最简单方法是使用图库。虽然它已被弃用,但我认为这样做更好。