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

时间:2012-10-09 15:49:46

标签: android android-layout

-->

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

似乎Android documentation about layout aliases不正确,肯定会出现不一致。本文档的这一部分以下面的布局文件为例:

<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').

Elsewhere in the Android documentation,它们显示了一种不同的,看似倒置且不正确的别名布局方式:

  

要为现有布局创建别名,请使用该元素,   包裹在<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>对必定是错误的事实,因为它需要一个不必要的父View

最后有<merge> documentation,这似乎与前一个方向相矛盾,没有提到顶级<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>

1 个答案:

答案 0 :(得分:7)

第一种技术有效,您只需将<resources>文件放在正确的文件夹中即可。它应该位于values文件夹而不是layout文件夹中,就像通过<include>重复使用布局一样。

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

如果您不想重复自己,可以将专用布局放在主layout文件夹中,并将其命名为compact_editor.xml。然后,您将在layout.xmlvalues-small文件夹中创建名为values-normal的文件。每个文件都会显示:

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

我已就其他两个问题提交documentation issue

相关问题
最新问题