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.