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.