2011-01-31 110 views
16

我一直在到处搜索这个问题的答案。我是Android新手,尝试通过java代替xml以编程方式将项添加到相对布局。我已经创建了一个测试类来尝试它,但项目保持堆叠而不是格式正确。我只是希望对方下一个TextView的,现在(最终我将使用的参数的左侧和右侧,但我开始很简单。我缺少什么?以编程方式将项目添加到相对布局

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);}; 

回答

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

此行意味着,底部我们强烈建议使用xml来代替它

+1

谢谢你,它实际上是RelativeLayout.Below,但足够接近。做xml的问题最终会从外部数据库填充。 – user597436 2011-01-31 20:45:45

2

你错过了各种各样的东西,比如说,它们会覆盖对方,首先ScrollView没有任何措施,第二个设置为LayoutParams.FILL_PARENT或WRAP_CONTENT;它的TextView1放错了位置,所以TextView2,s TextView1的位置与lay.addRule(RelativeLayout.ALIGN_PARENT_TOP,RelativeLayout.TRUE);

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);}; 
+0

这里有一个错误,行p.addRule(RelativeLayout.ALIGN_BOTTOM,tv.getId());必须像@Cristian所说:p.addRule(RelativeLayout.BELOW,tv.getId()); – Franco 2011-01-31 20:45:20

5

用途:

p.addRule(RelativeLayout.BELOW, tv.getId()); 
相关问题