Layouts mit <Einschließen> wiederverwenden

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.

<ph type="x-smartling-placeholder">

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: