Düzenleri <include> ile yeniden kullanma

Android küçük, yeniden kullanılabilir, etkileşimli öğeler sağlamak için çeşitli widget'lar sunar. Bununla birlikte, özel bir düzen gerektiren büyük bileşenleri de yeniden kullanmanız gerekebilir. Tamamlanmış düzenleri verimli bir şekilde yeniden kullanmak için <include> ve <merge> etiketlerini kullanarak bir düzeni bir başkasının içine yerleştirin.

Bu, evet veya hayır düğme paneli ya da açıklama metni içeren özel bir ilerleme çubuğu gibi karmaşık düzenler oluşturmanıza olanak tanır. Bu sayede, uygulamanızın birden fazla düzende ortak olan tüm öğelerini çıkarabilir, bunları ayrı ayrı yönetebilir ve her düzene dahil edebilirsiniz. Özel bir View yazarak ayrı kullanıcı arayüzü bileşenleri oluşturabilirsiniz ancak bir düzen dosyasını yeniden kullanarak bunu daha kolay bir şekilde yapabilirsiniz.

Yeniden kullanılabilir düzen oluşturma

Yeni bir XML dosyası oluşturarak ve yeniden kullanmak istediğiniz düzeni tanımlayarak başlayın. Örneğin, her etkinliğe (titlebar.xml) eklenecek bir başlık çubuğu tanımlayan bir düzeni burada görebilirsiniz:

<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 kullanın

Yeniden kullanılabilir bileşeni eklemek istediğiniz düzenin içine <include> etiketini ekleyin. Örneğin, önceki örnekte yer alan başlık çubuğunu içeren bir düzeni burada görebilirsiniz:

<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, aşağıdaki örnekte gösterilmiştir:

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

Bununla birlikte, <include> etiketini kullanarak düzen özelliklerini geçersiz kılmak isterseniz diğer düzen özelliklerinin etkin hale gelmesi için android:layout_height ve android:layout_width değerlerini de geçersiz kılın.

<merge> etiketini kullanın

<merge> etiketi, bir düzeni diğerine dahil ederken görünüm hiyerarşinizdeki gereksiz görüntüleme gruplarını ortadan kaldırmaya yardımcı olur. <merge> kullanım alanlarından biri, ViewGroup öğesini genişleterek özel bir görünüm uygulamanızdır.

Örneğin, ana düzeniniz ardışık iki görünümün birden fazla düzende yeniden kullanılabileceği bir dikey LinearLayout ise iki görünümü yerleştirdiğiniz yeniden kullanılabilir düzen için kendi kök görünümü gerekir. Bununla birlikte, yeniden kullanılabilir düzen için kök olarak başka bir LinearLayout kullanmak, bir dikey LinearLayout içinde bir dikey LinearLayout ile sonuçlanır. İç içe yerleştirilmiş LinearLayout, gerçek bir amaca hizmet etmez 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 açıklamak için bir düzen XML'si kullanabilirsiniz. XML'de en üstteki etiket, aşağıdaki örnekte gösterildiği gibi LinearLayout değil, <merge> etiketidir:

<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 <include> etiketini kullanarak başka bir düzene eklediğinizde, 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ğı bölümüne bakın.