以编程方式将按钮添加到相对布局

时间:2017-01-04 18:17:41

标签: android

我知道由于缺乏研究,这可能不是最好的问题,但实际上我不知道从哪里开始看这里。一切似乎应该工作得很好。无论如何,我试图以编程方式向我的应用程序UI添加几个按钮,以确保UI适合并无缝地适应所有屏幕。 Here is a very rough idea of the format I'm needing (with text in each button of course)

And this is what I'm getting.

CFLAGS="-O2 -fno-tree-dce -fno-optimize-sibling-calls" rvm install [your-version]

我甚至都没有找到一些神奇的东西,而是为我解决这个问题,因为我太懒了"解。指出我正确的方向,告诉我需要看的地方,这样的东西。我喜欢解决这些问题,但从正确的位置出发将是非常了不起的。

2 个答案:

答案 0 :(得分:0)

您对所有按钮使用相同的RelativeLayout.LayoutParams params。在Java中,所有非基本类型的赋值都是通过引用来创建的,所以当你这样做时

RelativeLayout.LayoutParams updateParams = params;
RelativeLayout.LayoutParams installParams = params;
RelativeLayout.LayoutParams dlFamilyParams = params;

等等,您将内存中的同一对象分配给各种变量。变量只是对某些内存地址的文本引用,因此使用不同的名称,您总是引用内存中的同一对象。

为每个按钮设置一些不同的布局参数属性,以将它们放置到视图中。但是如果我们告诉我们总是引用内存中的同一个对象,那么我们总是更新相同的对象,因此我们覆盖了之前的设置,我们只保留最后的设置。

因此,您要为所有按钮设置相同的params对象。

这些错误的组合导致所有按钮与他的设置具有相同的RelativeLayout.LayoutParams,它们被放置在另一个上面,您只能看到最后添加的。

您必须为每个按钮创建不同的params对象,如下所示:

RelativeLayout.LayoutParams updateParams = new RelativeLayout.LayoutParams(size.x / 5, 200);
...
RelativeLayout.LayoutParams installParams = new RelativeLayout.LayoutParams(size.x / 5, 200);
...

要分析视图问题,我建议您使用Layout Inspector工具,可通过菜单Tools - >访问。的Android

答案 1 :(得分:0)

试试这个

RelativeLayout layout =   (RelativeLayout)findViewById(R.id.activity_main);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT );


for (int i=0; i<10; i++) {
     Button button= new Button(this);
     button.setText("some_text");
     button.setId(i);

    // lp.addRule(RelativeLayout.RIGHT_OF, <Id>);

     layout.addView(tv2, lp); 
}