RelativeLayout - > match_parent与父视图的大小不同

时间:2012-01-17 15:01:13

标签: android relativelayout

我做了一个简单的应用程序来说明我的问题。简要说明: 该应用仅包含一项活动。它的根视图是TableLayout。后者填充了TableRow元素,而TableRow元素又从“row.xml”中膨胀。这是代码:

TestActivity.java

public class TestActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LayoutInflater inflater=getLayoutInflater();
    TableLayout table=new TableLayout(this);
    setContentView(table);
    TableRow row; 
    for(int i=0;i<3;i++){
        row=(TableRow)inflater.inflate(R.layout.row, null, true);
        table.addView(row);
    }

  }
}

在row.xml中TableRow是根元素,它有一个子 - RelativeLayout。注意RelativeLayout的属性android:layout_width =“match_parent”。 row.xml:

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background"
>

<RelativeLayout
    android:id="@+id/announcement_row_relative_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
</RelativeLayout>

然后我运行项目,打开hierarchyViewer工具并检查表行的宽度和相应的相对布局 - 我分别看到320和0。如果我在相对布局中声明“match_parent”,为什么它们不相同(320和320)?我附上2张图片,你可以自己观察元素的宽度。

TableRow width RelativeLayout width

2 个答案:

答案 0 :(得分:1)

这是因为您的RelativeLayout不包含子项,并且其onMeasure(..)方法未提供任何所需的宽度。

答案 1 :(得分:1)

您的问题出在此处:row=(TableRow)inflater.inflate(R.layout.row, null, true);

你必须像这样膨胀你的行:

row=(TableRow)inflater.inflate(R.layout.row, table, false);

这样,LayoutParams将从您的XML文件中加载。