2011-03-12 67 views
4

我想通过代码动态地在相对布局中显示3个复选框。但我只能显示两个复选框,一个在另一个之下。我在下面给出我的代码....我无法找出我错在哪里。如何通过Android中的代码动态调整Relativelayout中的视图元素?

我的代码 -

  RelativeLayout layout = new RelativeLayout(this); 

    CheckBox cb1 = new CheckBox(this); 
    cb1.setId(1); 
    cb1.setText("A"); 

    CheckBox cb2 = new CheckBox(this); 
    cb2.setId(2); 
    cb2.setText("B"); 

    CheckBox cb3 = new CheckBox(this); 
    cb3.setId(3); 
    cb3.setText("C"); 

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    layout.setLayoutParams(lp); 

    layout.addView(cb1);  

    lp.addRule(RelativeLayout.BELOW,cb1.getId()); 
    cb2.setLayoutParams(lp);   
    layout.addView(cb2); 

    lp.addRule(RelativeLayout.BELOW,cb2.getId()); 
    cb3.setLayoutParams(lp); 
    layout.addView(cb3); 

在此先感谢。

罗汉沃

回答

6
layout.addView(cb1);  

lp.addRule(RelativeLayout.BELOW,cb1.getId()); 
cb2.setLayoutParams(lp);   
layout.addView(cb2); 

lp.addRule(RelativeLayout.BELOW,cb2.getId()); 
cb3.setLayoutParams(lp); 
layout.addView(cb3); 

感谢的人帮我了很多

我猜你是错的点,你正在使用“LP”作为两个CB2和CB3布局参数(你不能将相同的规则“RelativeLayout.BELOW”一次又一次地添加到相同的布局参数对象“lp”)。 为CB2和LP2的CB3 使用LP和创建这样

 RelativeLayout layout = new RelativeLayout(this); 

CheckBox cb1 = new CheckBox(this); 
cb1.setId(1); 
cb1.setText("A"); 

CheckBox cb2 = new CheckBox(this); 
cb2.setId(2); 
cb2.setText("B"); 

CheckBox cb3 = new CheckBox(this); 
cb3.setId(3); 
cb3.setText("C"); 

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT); 
layout.setLayoutParams(lp); 

layout.addView(cb1);  

lp.addRule(RelativeLayout.BELOW,cb1.getId()); 
cb2.setLayoutParams(lp);   
layout.addView(cb2); 

RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);//important 

lp2.addRule(RelativeLayout.BELOW,cb2.getId());//important 
cb3.setLayoutParams(lp2);//important 
layout.addView(cb3); 

我认为这会工作。

+0

反正有动态创建规则吗? 请看看这个问题http://stackoverflow.com/questions/12048714/create-dyanamic-rule – 2012-08-21 05:20:37

+0

是的,你可以动态地创建一个规则。但你真正想要的是什么还不确定。对不起,这么晚回复 – Diljeet 2013-12-27 11:24:33

相关问题