Неверная документация на Android о псевдонимах компоновки?

Я хотел бы выяснить, как использовать повторное использование или «псевдоним» с наименьшим кодом шаблона.

Похоже, что документация на 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> должна быть ошибкой, потому что она требует ненужного родительского 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> 

Solutions Collecting From Web of "Неверная документация на Android о псевдонимах компоновки?"

Первый метод работает, вам просто нужно поместить ваш файл <resources> в правильную папку. Он должен находиться в папках values не папок layout как вы могли бы при повторном использовании макетов через <include> .

Например, предположим, что у вас есть макет с именем editor.xml который живет в папке layout . Предположим, вы хотите использовать специализированный макет для small и normal размеров экрана. Если вам не хотелось повторять себя, вы просто скопировали и ввели этот макет в layout-small и layout-normal папки и назовите его editor.xml в каждой папке. Таким образом, у вас будет три файла с именем editor.xml .

Если вы не хотите повторять себя, вы разместите специализированный макет в папке основного layout и назовите его, скажем, compact_editor.xml . Затем вы создадите файл с именем layout.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> 

Я зарегистрировал проблему с документацией о двух других проблемах.