Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在RelativeLayout中以编程方式布置ImageView时遇到问题_Java_Android_Android Relativelayout - Fatal编程技术网

Java 在RelativeLayout中以编程方式布置ImageView时遇到问题

Java 在RelativeLayout中以编程方式布置ImageView时遇到问题,java,android,android-relativelayout,Java,Android,Android Relativelayout,我试图在RelativeLayout中添加五个左右的ImageView,每个新视图位于前一个视图的右侧。然而,我得到的是(显然)它们彼此堆叠在一起,好像它们都是左对齐的。相关代码段: ImageView[] foo = new ImageView[levels]; for (int i = 0; i < levels; i++) { foo[i] = new ImageView(context); layoutFoo.addView(foo[i]); foo[i]

我试图在RelativeLayout中添加五个左右的ImageView,每个新视图位于前一个视图的右侧。然而,我得到的是(显然)它们彼此堆叠在一起,好像它们都是左对齐的。相关代码段:

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);
    }
}
ImageView[]foo=新的ImageView[levels];
对于(int i=0;i
有什么提示我做错了什么吗?ImageView没有任何宽度(因为我还没有为它们指定位图),这并不重要,对吧


编辑:问题是没有为ImageView设置高度和宽度。解决方案是使用setLayoutParams()或JustWork示例中的构造函数设置它们。

您必须在设置属性后添加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);
}
ImageView-foo;
RelativeLayout.LayoutParams fooParams;
对于(int i=0;i
我认为放置这些图像最简单的方法是使用图库。尽管有人不赞成这样做,但我认为这样做更好。

除非我遗漏了什么,否则这不是真的;尝试向尚未添加到布局的视图中添加规则会引发RuntimeException。另外,您可以扩展第二位吗?您是否建议我向ImageView添加几个位图?我看不到任何方法…不幸的是你错过了这么多。这只是我在5秒钟内找到的一个例子,它证明了你没有找到:你的答案“你必须在设置属性后添加你的ImageView”,结果却不是这样;在设置属性之前,将ImageView添加到布局可以正常工作。不过,感谢您提供的示例代码,它确实引导我找到了答案,即我没有为ImageView设置高度或宽度。如果它确实引导了您,那就太好了。顺便问一下,为什么-1甚至被标记为答案?