0

我正在尝试将五个左右的 ImageView 添加到 RelativeLayout,每个新的都位于前一个的右侧。但是,我得到的是(显然)所有这些都堆叠在一起,就好像它们都是 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 示例中的构造函数设置它们。

4

2 回答 2

-1

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

于 2013-09-04T01:01:46.973 回答
-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);
}
于 2013-09-04T00:56:05.083 回答