我想弄清楚如何用最少的样板代码重用或“别名”布局。
似乎有关布局别名的 Android 文档不正确,而且肯定显得不一致。这部分文档显示了以下布局文件作为示例:
<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>
如果我尝试编译它,我会得到一个Attribute is missing the Android namespace prefix
错误。即使在将命名空间添加到resources
元素之后,我也得到了error: Error: String types not allowed (at 'type' with value 'layout').
在 Android 文档的其他地方,它们显示了一种不同且看似颠倒且不正确的别名布局方式:
要为现有布局创建别名,请使用包含在
<merge>
. 例如:<?xml version="1.0" encoding="utf-8"?> <merge> <include layout="@layout/main_ltr"/> </merge>
运行此程序会导致 LogCat 中出现以下错误E/AndroidRuntime(1558): android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
。所以这个错误似乎强化了这一<include>
<merge>
对一定是错误的事实,因为它需要一个不必要的 parent View
。
最后是<merge>
文档,这似乎与前一个方向相矛盾,没有提到顶级的倒置形式<merge><include/></merge>
。
为了避免包含这样一个冗余的视图组,您可以使用该元素作为可重用布局的根视图。例如:
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/delete"/> </merge>