Falsche Android-Dokumentation zu Layout-Aliasen?
Ich möchte herausfinden, wie Layouts mit dem geringsten Boilerplate-Code wiederverwendet oder "alias" werden können.
Es scheint, dass dieAndroid-Dokumentation zu Layout-Aliasen ist falsch und erscheint sicherlich inkonsistent. Dieser Dokumentationsabschnitt zeigt als Beispiel die folgende Layoutdatei:
<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>
Wenn ich versuche, dies zu kompilieren, erhalte ich eineAttribute is missing the Android namespace prefix
Error. Auch nach dem Hinzufügen des Namespace zumresources
Element, ich versteheerror: Error: String types not allowed (at 'type' with value 'layout').
An anderer Stelle in der Android-Dokumentationzeigen sie einen anderen und scheinbar umgekehrten und falschen Weg zu Alias-Layouts:
Um einen Alias für ein vorhandenes Layout zu erstellen, verwenden Sie das Element, das in ein eingeschlossen ist<merge>
. Zum Beispiel:
<?xml version="1.0" encoding="utf-8"?>
<merge>
<include layout="@layout/main_ltr"/>
</merge>
Wenn Sie dies ausführen, tritt in LogCat der folgende Fehler aufE/AndroidRuntime(1558): android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
. Dieser Fehler scheint also die Tatsache zu verstärken, dass dies<include>
<merge>
Paar muss ein Fehler sein, weil es ein unnötiges Elternteil erfordertView
.
Endlich gibt es das<merge>
Dokumentation, was der früheren Richtung zu widersprechen scheint, ohne die umgekehrte Form einer obersten Ebene zu erwähnen<merge><include/></merge>
.
Um das Einschließen einer solchen redundanten Ansichtsgruppe zu vermeiden, können Sie stattdessen das Element als Stammansicht für das wiederverwendbare Layout verwenden. Zum Beispiel:
<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>