我想弄清楚如何以最少的样板代码重用或“混淆”布局。
看来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
文件夹中。假设您要在small
和normal
屏幕尺寸上使用特殊的布局。如果您不希望重复自己的操作,则只需将此布局复制并粘贴到layout-small
和layout-normal
文件夹中,然后在每个文件夹中将其命名为editor.xml
。因此,您将拥有三个名为editor.xml
的文件。
如果您不想重复自己,可以将专用布局放置在layout
主文件夹中,并命名为compact_editor.xml
。然后,您将在layout.xml
和values-small
文件夹中创建一个名为values-normal
的文件。每个文件将显示为:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="editor" type="layout">@layout/compact_editor</item>
</resources>
我已经针对其他两个问题提交了documentation issue。