我想通过TableLayout
元素扩展我的ViewStab
一些额外的行。这是我Activity
的布局:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root_table_layout">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Row 1"/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Row 2"/>
</TableRow>
<ViewStub
android:id="@+id/view_stub_1"
android:layout="@layout/merge_table_1"/>
<ViewStub
android:id="@+id/view_stub_2"
android:layout="@layout/merge_table_2"/>
</TableLayout>
view_stub_1
或view_stub_2
在Activity
onCreate
上夸大了(这取决于应用程序的状况)。
ViewStub
应该将使用<merge>
标记定义的布局作为根元素进行膨胀。像这样:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Row 5"/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Row 6"/>
</TableRow>
</merge>
但是当Activity
即将开始时,我遇到了这个例外:
merge只能与有效的ViewGroup root一起使用 attachToRoot =真 - 使用getLayoutInflater
答案 0 :(得分:5)
<merge>
元素现在似乎不支持ViewStub
标记:
ViewStub的唯一缺点是它目前不支持 标签。
Romain Guy's post on layout tricks
最后,我使用Activity
的{{1}}在LayoutInflater
中添加了其他行:
TableLayout
由于我只想在ViewGroup rootTableLayout = (ViewGroup) findViewById(R.id.root_table_layout);
getLayoutInflater().inflate(R.layout.merge_table_1, rootTableLayout, true);
处附加一些TableRows
,因此该解决方案有效。对于更复杂的场景(在ViewGroup
中间动态包含TableRows
),我仍然不知道这样做的正确方法。