Używaj ponownie układów z operatorem <include>

Android oferuje wiele różnych widżetów z małymi, interaktywnymi elementami wielokrotnego użytku, możesz też potrzebować ponownie większych komponentów, które wymagają specjalnego układu. Efektywne ponowne wykorzystanie cały układ, do umieszczenia na stronie użyj tagów <include> i <merge> jeden układ w drugim.

Pozwala to tworzyć złożone układy, np. panele z przyciskami „tak lub nie” lub niestandardowy proces postępu pasek z tekstem opisu. Oznacza to, że można wyodrębnić z aplikacji wszystkie elementy, które są wspólne w wielu układach, zarządzaj nimi oddzielnie i uwzględniaj w każdym z nich. Choć możesz tworzyć osobne komponenty interfejsu, wpisując View, możesz to zrobić łatwiej dzięki ponowne użycie pliku układu.

Tworzenie układu wielokrotnego użytku

Zacznij od utworzenia nowego pliku XML i określenia układu, którego chcesz używać ponownie. Dla: Oto układ, który definiuje pasek tytułu, który ma się wyświetlać w każdej aktywności (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>

Element główny View musi być dokładnie taki sam jak w każdym do którego chcesz dodać ten układ.

Użyj tagu <include> oznaczyć tagiem

W układzie, w którym chcesz dodać komponent wielokrotnego użytku, dodaj komponent <include>. Tak na przykład wygląda układ, który obejmuje pasek tytułu z aplikacji poprzedniego przykładu:

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

Możesz też zastąpić wszystkie parametry układu – dowolne android:layout_* w widoku głównym uwzględnionego układu, określając je w tagu <include>. Widać to w tym przykładzie:

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

Jeśli jednak chcesz zastąpić atrybuty układu za pomocą tagu <include>, również zastąp android:layout_height i android:layout_width, aby inne atrybuty układu.

Użyj funkcji <merge>. oznaczyć tagiem

Tag <merge> pomaga wyeliminować zbędne grupy widoków w hierarchii widoków gdy uwzględniasz jeden układ w drugim. Jednym z przypadków użycia funkcji <merge> jest zaimplementować widok niestandardowy, rozszerzając ViewGroup.

Na przykład, jeśli układ główny jest układem pionowym LinearLayout, w których 2 kolejnych widoków można używać wielokrotnie w wielu układach, natomiast w układzie wielokrotnego użytku, w którym wymaga własnego widoku głównego. Użycie innego elementu LinearLayout jako katalogu głównego w przypadku układu wielokrotnego użytku oznacza pionowy LinearLayout w pionie LinearLayout Zagnieżdżona klasa LinearLayout nie służy realnie do celów i spowalnia wydajność interfejsu użytkownika.

Zamiast tego możesz rozszerzyć widok LinearLayout, aby utworzyć widok niestandardowy i użyć kodu XML układu. aby opisać jego poglądy podrzędne. Pierwszym tagiem w pliku XML jest <merge>, a nie LinearLayout zgodnie z poniższym przykładem:

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

jeśli uwzględnisz ten układ w innym układzie, przy użyciu funkcji <include> tag – system ignoruje element <merge> i umieszcza dwa przyciski, bezpośrednio w układzie, zamiast tagu <include>.

Więcej informacji o <include>: Zasób układu.