我想弄清楚如何以最少的样板代码重用或“混淆”布局。

看来Android documentation about layout aliases是不正确的,并且肯定看起来不一致。本节文档以以下布局文件为例:

<resources>
    <item name="main" type="layout">@layout/main_twopanes</item>
</resources>

如果我尝试对此进行编译,则会收到Attribute is missing the Android namespace prefix错误。即使在将 namespace 添加到resources元素之后,我仍然得到error: Error: String types not allowed (at 'type' with value 'layout').
Elsewhere in the Android documentation,它们显示了一种不同的,看似倒置的和不正确的别名布局方式:



运行此命令会在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>的倒置形式。

最佳答案

第一种技术有效,您只需要将<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

10-07 19:58
查看更多