2011-03-16 174 views
7

我很难让两个文本视图在我的java代码中出现在彼此的顶部。下面是我与试验验证码:在java代码中设置RelativeLayout

/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     layout = new RelativeLayout(this); 
     text1 = new TextView(this); 
     text1.setText("1"); 
     text2 = new TextView(this); 
     text2.setText("2"); 

     RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 
     RelativeLayout.LayoutParams q = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 

     q.addRule(RelativeLayout.BELOW, layout.getId()); 
     text1.setLayoutParams(q); 
     layout.addView(text1); 


     p.addRule(RelativeLayout.BELOW,text1.getId()); 
     text2.setLayoutParams(p); 
     layout.addView(text2); 

     setContentView(layout); 
    } 

这堆在同一行的两个文本的意见,但我想TextView的文本2,出现以下TextView的文本1,所以在我的应用我想下面显示为输出:

1 
2 

我试过所有与“addRule”方法的东西,我不知道为什么这不起作用。我想知道如何在没有XML的情况下做到这一点,因为我打算建立一个方法库,可以建立一个可以通过编辑数组轻松调整的布局。

+2

接受一些答案你以前的问题 – 2011-03-16 15:05:43

回答

8

TextViews没有一个ID(默认ID是-1)...把这个自己的初始化后:

text1.setId(1111); // 1111 is just an example, 
text2.setId(2222); // just make sure the id are unique 
+0

哦,我的,那工作! – 2011-03-16 15:22:21

2

我不认为你正在寻找布局在RelativeLayout下面的text1视图,因为你将所有的视图添加到它作为孩子,对吧?尝试删除第一条规则;该规则是要求文本视图低于它所处的相同视图。

编辑:另外一个帮助是明确设置你正在布局相对于视图的ID。

所以在这里:

text1.setId(2); 
p.addRule(RelativeLayout.BELOW,2); 
+0

带或不带layout_below = “的上述文本视图ID”的部分去掉它似乎工作。不过,我认为你是对的,最好不要将它设置在相对布局下方。 – 2011-03-16 15:22:58

0

您可以使用XML这个布局:

在相对布局 你设置第一个textview并为它分配一些id fot下一个文本vi EW我们可以指定参数 的android:这样,我们得到以下1文本视图第2个文本视图