有关布局别名的Android文档不正确?

我想弄清楚如何重新使用或“别名”与最less的样板代码的布局。

看起来有关布局别名的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文档的其他地方 ,他们显示了一个不同的,看似颠倒和不正确的方式来别名布局:

要为现有布局创build别名,请使用包装在<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中出现以下错误E/AndroidRuntime(1558): android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true 。 所以这个错误似乎加强了这个<include> <merge>对必须是错误的事实,因为它需要一个不必要的父View

最后是<merge>文档 ,它似乎与前一个方向相矛盾,没有提到顶层<merge><include/></merge>的反转forms。

为了避免包含这样的冗余视图组,您可以改为使用该元素作为可重用布局的根视图。 例如:

 <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> 

Solutions Collecting From Web of "有关布局别名的Android文档不正确?"

第一种技术的工作原理,你只需要把你的<resources>文件放在正确的文件夹中。 它应该位于values文件夹而不是layout文件夹中,就像通过<include>重复使用布局时一样。

例如,假设您有一个名为editor.xmllayout ,它位于layout文件夹中。 假设你想在smallnormal屏幕尺寸上使用专门的布局。 如果您不关心重复自己,只需将此布局复制并粘贴到layout-smalllayout-normal文件夹中, editor.xml在每个文件夹editor.xml其命名为editor.xml 。 所以你有三个名为editor.xml文件。

如果你不想重复自己,你可以将专门的布局放在主layout文件夹中,并命名为compact_editor.xml 。 然后在values-smallvalues-normal文件夹中创build一个名为layout.xml的文件。 每个文件将读取:

 <?xml version="1.0" encoding="utf-8"?> <resources> <item name="editor" type="layout">@layout/compact_editor</item> </resources> 

我提交了关于另外两个问题的文档问题。