在java代码中设置RelativeLayout

时间:2011-03-16 14:59:30

标签: java android android-layout android-relativelayout

我很难在我的java代码中将两个文本视图显示在彼此之上。这是我正在尝试的代码:

/** 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 text2显示在TextView text1下面,所以在我的应用程序中我希望以下内容显示为输出:

1
2

我用“addRule”方法尝试了各种各样的东西,我不知道为什么这不起作用。我想知道如何在没有XML的情况下执行此操作,因为我计划构建一个方法库,可以构建一个可以通过编辑数组轻松调整的布局。

3 个答案:

答案 0 :(得分:8)

您的TextViews没有ID(默认情况下,ID为-1)...在初始化后将其放入:

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

答案 1 :(得分:3)

我认为您不打算在RelativeLayout下面布置text1视图,因为您已将所有视图添加为子视图,对吧?尝试删除第一条规则;该规则要求文本视图低于它所在的视图。

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

所以这里:

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

答案 2 :(得分:0)

您可以使用xml布局:

相对布局 你设置第一个textview并为它分配一些id 在下一个文本视图中我们可以分配参数 android:layout_below =“上面文本视图的id” 通过这种方式,我们得到第一个文本视图下面的第二个文本视图