Riutilizza i layout con <include>

Android offre una varietà di widget per fornire piccoli elementi interattivi riutilizzabili, potresti dover riutilizzare componenti più grandi che richiedono un layout speciale. Per riutilizzare in modo efficiente layout completi, utilizza i tag <include> e <merge> da incorporare da un layout all'altro.

In questo modo puoi creare layout complessi, ad esempio un riquadro con pulsanti Sì o No o un avanzamento personalizzato. barra con il testo descrittivo. Ciò significa che puoi estrarre qualsiasi elemento della tua applicazione sono comuni a più layout, gestiscili separatamente e includili in ogni layout. Mentre è possibile creare singoli componenti dell'interfaccia utente scrivendo una View, puoi farlo più facilmente a riutilizzare un file di layout.

Creare un layout riutilizzabile

Per iniziare, crea un nuovo file XML e definisci il layout che vuoi poter riutilizzare. Per ad esempio, ecco un layout che definisce una barra del titolo da includere in ogni attività (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>

Il View principale deve essere esattamente come vuoi che appaia in ogni a cui prevedi di aggiungerlo.

Utilizza l'istruzione <include> il tag.

All'interno del layout in cui vuoi aggiungere il componente riutilizzabile, aggiungi il token Tag <include>. Ad esempio, ecco un layout che include la barra del titolo da dell'esempio precedente:

<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>

Puoi anche eseguire l'override di tutti i parametri di layout: qualsiasi valore android:layout_* della visualizzazione principale del layout incluso, specificandoli nel Tag <include>. Ciò è mostrato nell'esempio seguente:

<include android:id="@+id/news_title"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/title"/>

Tuttavia, se vuoi sostituire gli attributi di layout utilizzando il tag <include>, eseguono anche l'override di android:layout_height e android:layout_width per rendere vengono applicati gli altri attributi di layout.

Usa l'elemento <merge> il tag.

Il tag <merge> consente di eliminare i gruppi di visualizzazioni ridondanti nella gerarchia delle visualizzazioni se includi un layout all'interno di un altro. Un caso d'uso di <merge> è quando implementare una visualizzazione personalizzata estendendo un ViewGroup.

Ad esempio, se il layout principale è un formato verticale LinearLayout in cui due visualizzazioni consecutive possono essere riutilizzate in più layout, quindi nel layout riutilizzabile in cui posizioni due viste richiede una propria vista root. Tuttavia, l'utilizzo di un altro LinearLayout come root per il layout riutilizzabile genera un LinearLayout verticale all'interno di un verticale LinearLayout. L'elemento LinearLayout nidificato non ha uno scopo reale e rallenta le prestazioni della UI.

In alternativa, puoi estendere un LinearLayout per creare una visualizzazione personalizzata e utilizzare un file XML di layout per descrivere le viste secondarie. Il tag più popolare nel file XML è <merge>, anziché LinearLayout, come mostrato nell'esempio seguente:

<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>

Quando includi questo layout in un altro layout utilizzando l'<include> : il sistema ignora l'elemento <merge> e posiziona i due pulsanti direttamente nel layout, al posto del tag <include>.

Per ulteriori informazioni su <include>, vedi Risorsa di layout.