RelativeLayout元素重叠不正确

时间:2012-03-11 12:38:10

标签: android relativelayout overlays

我正在尝试以编程方式构建Android视图的一部分,但不幸的是我遇到了RelativeLayout的一些问题。它使Elements叠加在彼此上

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.insertnew_layout);
    LinearLayout ll =  (LinearLayout) findViewById(R.id.container); 

    ll.setOrientation(LinearLayout.VERTICAL);
    TableLayout tl = new TableLayout(this);
    tl.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));


        // fill content
        for (int i = 0; i < 3; i++) {   

        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        RelativeLayout rl = new RelativeLayout(this);
        rl.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        TextView score = new TextView(this);
        score.setText(""+i);
        RelativeLayout.LayoutParams lpScore = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT);
        lpScore.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        score.setLayoutParams(lpScore);

        TextView description = new TextView(this);
        description.setText("this is my description");
        RelativeLayout.LayoutParams lpDescription = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT);
        lpDescription.addRule(RelativeLayout.RIGHT_OF, score.getId());

        description.setLayoutParams(lpDescription);

        CheckBox checkbox = new CheckBox(this);
        RelativeLayout.LayoutParams lpCheckbox = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT);
        lpCheckbox.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        checkbox.setLayoutParams(lpCheckbox);

        rl.addView(score);
        rl.addView(description);
        rl.addView(checkbox);
        tl.addView(rl);

    }

    ll.addView(tl);

这就是它的样子:

output in javacode

如您所见,“描述”位于“得分”之上。

以下是xml中的相同代码:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tableLayoutTextEntry" >

<TableRow
    android:id="@+id/tableRowTextEntry"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="score" />

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/score"
            android:text="description" />

        <CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="select" />

    </RelativeLayout>

</TableRow>

</TableLayout>

以下是xml中的内容:

output in xml

如您所见,在xml中,toRightOf命令按预期工作 - 描述位于分数右侧

怎么可能?不行

lpDescription.addRule(RelativeLayout.RIGHT_OF, score.getId());

做同样的事情?

1 个答案:

答案 0 :(得分:1)

在您调用它时,score.getId()将返回-1(无效),因为尚未将其添加到屏幕并处理完整个布局。 在调用setId()之前,您必须使用getId()手动设置ID,并且一切正常。