以编程方式向相对布局添加项目

17

我已经到处寻找答案,想知道如何通过Java程序动态地向RelativeLayout添加控件而不是XML。 我创建了一个测试类来尝试它,但是项目一直堆叠在一起而不是正确格式化。现在我只希望一个TextView在另一个下面(最终我会使用left和right参数,但我现在从简开始)。我错过了什么吗?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ScrollView sv = new ScrollView(this);
    RelativeLayout ll = new RelativeLayout(this);
    ll.setId(99);
    sv.addView(ll);
    TextView tv = new TextView(this);
    tv.setText("txt1");
    tv.setId(1);
    TextView tv2 = new TextView(this);
    tv2.setText("txt2");
    tv2.setId(2);
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lay.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    ll.addView(tv, lay);
    RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());
    ll.addView(tv2, p);  this.setContentView(sv);};
3个回答

21
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());

这行代码的意思是tv2的底部与tv-的底部对齐,也就是它们会相互覆盖。你想要的属性可能是RelativeLayout.BELOW。不过,我强烈建议使用XML来实现。


如果 tv 没有 id 呢? - Shubham Gupta

6

使用:

p.addRule(RelativeLayout.BELOW, tv.getId());

2

您缺少一些东西,首先ScrollView没有措施,使用LayoutParams.FILL_PARENT或WRAP_CONTENT进行设置;其次,TextView1位置不正确,所以TextView2也不正确,可以使用lay.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE)来设置TextView1的位置。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ScrollView sv = new ScrollView(this);
    RelativeLayout ll = new RelativeLayout(this);
    ll.setId(99);

    sv.addView(ll, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    TextView tv = new TextView(this);
    tv.setText("txt1");
    tv.setId(1);

    TextView tv2 = new TextView(this);
    tv2.setText("txt2");
    tv2.setId(2);
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lay.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    ll.addView(tv, lay);
    RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());
    ll.addView(tv2, p);  
this.setContentView(sv);};

这里有一个错误,行 p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId()); 必须像 @Cristian 所说的那样:p.addRule(RelativeLayout.BELOW, tv.getId()); - Franco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接