Android, küçük, yeniden kullanılabilir ve etkileşimli öğeler sunmak için çeşitli widget'lar sunsa da özel bir düzen gerektiren daha büyük bileşenleri de yeniden kullanmanız gerekebilir. Tam düzenleri verimli bir şekilde yeniden kullanmak için <include> ve <merge> etiketlerini kullanarak bir düzeni başka bir düzene yerleştirin.
Bu sayede, evet veya hayır düğmesi paneli ya da açıklama metni içeren özel bir ilerleme çubuğu gibi karmaşık düzenler oluşturabilirsiniz. Ayrıca, uygulamanızın birden fazla düzende ortak olan öğelerini ayıklayabilir, bunları ayrı ayrı yönetebilir ve her düzene dahil edebilirsiniz. Özel bir View yazarak ayrı ayrı kullanıcı arayüzü bileşenleri oluşturabilirsiniz ancak düzen dosyasını yeniden kullanarak bu işlemi daha kolay bir şekilde yapabilirsiniz.
Yeniden kullanılabilir düzen oluşturma
Yeni bir XML dosyası oluşturup yeniden kullanmak istediğiniz düzeni tanımlayarak başlayın. Örneğin, her etkinliğe eklenecek bir başlık çubuğunu tanımlayan bir düzen aşağıda verilmiştir (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>
Kök View, bu düzeni eklemeyi planladığınız her düzende tam olarak görünmesini istediğiniz şekilde olmalıdır.
<include> etiketini kullanma
Yeniden kullanılabilir bileşeni eklemek istediğiniz düzende <include> etiketini ekleyin. Örneğin, önceki örnekteki başlık çubuğunu içeren bir düzen aşağıda verilmiştir:
<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>
Ayrıca, dahil edilen düzenin kök görünümünün tüm düzen parametrelerini (tüm android:layout_* özellikleri) <include> etiketinde belirterek geçersiz kılabilirsiniz. Bu durum aşağıdaki örnekte gösterilmektedir:
<include android:id="@+id/news_title" android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/title"/>
Ancak düzen özelliklerini <include> etiketiyle geçersiz kılmak istiyorsanız diğer düzen özelliklerinin geçerli olması için android:layout_height ve android:layout_width etiketlerini de geçersiz kılın.
<merge> etiketini kullanma
<merge> etiketi, bir düzeni diğerinin içine dahil ederken görünüm hiyerarşinizdeki gereksiz görünüm gruplarını ortadan kaldırmaya yardımcı olur. <merge> kullanım alanlarından biri, ViewGroup öğesini genişleterek özel bir görünüm uyguladığınız zamandır.
Örneğin, ana düzeniniz dikey bir LinearLayout ise ve iki ardışık görünüm birden fazla düzende yeniden kullanılabiliyorsa iki görünümü yerleştirdiğiniz yeniden kullanılabilir düzenin kendi kök görünümü olması gerekir. Ancak, yeniden kullanılabilir düzenin kökü olarak başka bir LinearLayout kullanmak, dikey bir LinearLayout içinde dikey bir LinearLayout ile sonuçlanır. İç içe yerleştirilmiş LinearLayout öğesinin gerçek bir amacı yoktur ve kullanıcı arayüzü performansınızı yavaşlatır.
Bunun yerine, özel bir görünüm oluşturmak için LinearLayout öğesini genişletebilir ve alt görünümlerini tanımlamak için bir düzen XML'si kullanabilirsiniz. XML'deki üst etiket, aşağıdaki örnekte gösterildiği gibi LinearLayout yerine <merge> olmalıdır:
<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>
Bu düzeni başka bir düzene dahil ettiğinizde (<include> etiketiyle) sistem, <merge> öğesini yoksayar ve iki düğmeyi doğrudan düzene, <include> etiketinin yerine yerleştirir.
<include> hakkında daha fazla bilgi için Düzen kaynağı başlıklı makaleyi inceleyin.