Android bietet zwar eine Vielzahl von Widgets für kleine,
wiederverwendbare und interaktive Elemente,
Möglicherweise müssen Sie auch größere Komponenten wiederverwenden,
die ein spezielles Layout erfordern. Zur effizienten Wiederverwendung
vollständige Layouts erstellen, verwende die Tags <include>
und <merge>
, um
innerhalb eines anderen.
So kannst du komplexe Layouts erstellen, z. B. ein Ja/Nein-Schaltflächenfeld oder einen benutzerdefinierten Fortschritt
mit einer Beschreibung. Sie können alle Elemente Ihrer Anwendung extrahieren,
die in mehreren Layouts gemeinsam sind, diese separat verwalten und in jedes Layout einfügen. Während
können Sie einzelne UI-Komponenten erstellen, indem Sie ein benutzerdefiniertes
View
, geht das ganz einfach, indem Sie
Layoutdatei wiederverwenden.
Wiederverwendbares Layout erstellen
Erstellen Sie zunächst eine neue XML-Datei und definieren Sie das Layout, das Sie wiederverwenden möchten. Für
Hier ist ein Beispiel für ein Layout, in dem eine Titelleiste definiert wird, die in jeder Aktivität enthalten sein soll.
(titlebar.xml
):
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/titlebar_bg" tools:showIn="@layout/activity_main" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/gafricalogo" /> </FrameLayout>
Die Stamm-View
muss genau so angezeigt werden, wie sie in den einzelnen
das Layout, dem Sie dieses Layout hinzufügen möchten.
Verwenden Sie die Methode <include> Tag
Fügen Sie im Layout, in dem Sie die wiederverwendbare Komponente hinzufügen möchten,
<include>
-Tag. Hier ist z. B. ein Layout, das die Titelleiste von
Beispiel:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/app_bg" android:gravity="center_horizontal"> <include layout="@layout/titlebar"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello" android:padding="10dp" /> ... </LinearLayout>
Sie können auch alle Layoutparameter überschreiben: beliebige android:layout_*
der Stammansicht des enthaltenen Layouts, indem Sie sie im
<include>
-Tag. Dies wird im folgenden Beispiel gezeigt:
<include android:id="@+id/news_title" android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/title"/>
Wenn Sie Layoutattribute mit dem Tag <include>
überschreiben möchten,
auch android:layout_height
und android:layout_width
überschreiben,
werden alle anderen Layout-Attribute wirksam.
<merge> verwenden Tag
Mit dem Tag <merge>
lassen sich redundante Datenansichtsgruppen in der Ansichtshierarchie entfernen.
wenn Sie ein Layout in ein anderes einfügen. Ein Anwendungsfall von <merge>
ist, wenn Sie
eine benutzerdefinierte Ansicht implementieren, indem Sie ein ViewGroup
erweitern.
Wenn Ihr Hauptlayout beispielsweise eine vertikale
LinearLayout
, wobei zwei
aufeinanderfolgende Ansichten können in mehreren Layouts wiederverwendet werden. Dann kommt das wiederverwendbare Layout, in dem Sie
Für zwei Ansichten ist
eine eigene Stammansicht erforderlich. Wenn Sie jedoch eine andere LinearLayout
als Stamm verwenden,
für das wiederverwendbare Layout führt zu einem vertikalen LinearLayout
innerhalb einer vertikalen
LinearLayout
Das verschachtelte LinearLayout
-Element erfüllt keinen wirklichen Zweck und verlangsamt sich
die Leistung der Benutzeroberfläche beeinträchtigen.
Stattdessen können Sie ein LinearLayout
erweitern, um eine benutzerdefinierte Ansicht zu erstellen und eine Layout-XML-Datei zu verwenden.
zur Beschreibung der untergeordneten Ansichten. Das oberste Tag in der XML-Datei ist <merge>
und nicht
LinearLayout
, wie im folgenden Beispiel gezeigt:
<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>
Wenn Sie dieses Layout mithilfe der <include>
in ein anderes Layout einfügen
Tag: Das System ignoriert das <merge>
-Element und platziert die beiden Schaltflächen
direkt im Layout anstelle des <include>
-Tags.
Weitere Informationen zu <include>
finden Sie unter
Layoutressource: