Düzenleri <include> ile yeniden kullanma

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Oluşturma bölümünde düzenlerle nasıl çalışacağınızı öğrenin.

Android, küçük, yeniden kullanılabilir, etkileşimli öğeler sunmak için çeşitli widget'lar sunsa da özel bir düzen gerektiren daha büyük bileşenleri yeniden kullanmanız da gerekebilir. Tüm düzenleri verimli bir şekilde yeniden kullanmak için <include> ve <merge> etiketlerini kullanarak bir düzeni başka bir düzenin içine 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. Bu, uygulamanızda birden fazla düzende ortak olan tüm öğeleri ayıklayabilir, 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 yapabilirsiniz.

Yeniden kullanılabilir bir düzen oluşturma

Yeni bir XML dosyası oluşturup yeniden kullanabilmeyi 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 (titlebar.xml) aşağıda verilmiştir:

<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üzenin içine <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 (herhangi bir android:layout_* özelliği) <include> etiketinde belirterek geçersiz kılabilirsiniz. Bu, 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 <include> etiketini kullanarak düzen özelliklerini geçersiz kılmak istiyorsanız diğer düzen özelliklerinin geçerli olması için android:layout_height ve android:layout_width özelliklerini de geçersiz kılın.

<merge> etiketini kullanma

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

Örneğin, ana düzeniniz iki art arda görünümün birden fazla düzende yeniden kullanılabileceği dikey bir LinearLayout ise iki görünümü yerleştirdiğiniz yeniden kullanılabilir düzenin kendi kök görünümü gerekir. Ancak yeniden kullanılabilir düzen için kök olarak başka bir LinearLayout kullanmak, dikey bir LinearLayout içinde dikey bir LinearLayout elde etmenize neden olur. İç 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 bir LinearLayout öğesini genişletebilir ve alt görünümlerini açıklamak 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 <include> etiketini kullanarak başka bir düzene eklediğinizde, sistem <merge> öğesini yoksayar ve <include> etiketi yerine doğrudan düzenin içine bu iki düğmeyi yerleştirir.

<include> hakkında daha fazla bilgi için Düzen kaynağı başlıklı makaleyi inceleyin.