Düzenleri <include> ile yeniden kullanma

Android küçük, yeniden kullanılabilir ve etkileşimli öğeler sağlamak için çeşitli widget'lar sunsa da özel bir düzen gerektiren daha büyük bileşenleri de yeniden kullanmanız gerekebilir. Etkili bir şekilde yeniden kullanmak için tam düzenleri yerleştirmek için <include> ve <merge> etiketlerini kullanın bir düzen içinde çalışır.

Bu, evet veya hayır düğmesi paneli veya özel ilerleme durumu gibi karmaşık düzenler oluşturmanıza olanak tanır. açıklama metnini içeren çubuk. Bu, uygulamanızın Google'a ait olmayan, ancak birden fazla düzende yaygındır, bunları ayrı ayrı yönetin ve her düzene ekleyin. Bu sırada özel bir kod yazarak bağımsız kullanıcı arayüzü bileşenleri View, bunu daha kolay bir şekilde yapmak için yeniden kullanmanız gerekecek.

Yeniden kullanılabilir bir düzen oluşturun

Yeni bir XML dosyası oluşturarak ve yeniden kullanmak istediğiniz düzeni tanımlayarak başlayın. Örneğin, Örneğin, aşağıda her etkinliğe eklenecek bir başlık çubuğu tanımlayan bir düzen 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, her bir bu düzeni eklemeyi düşündüğünüz bir sayfa düzeni seçin.

<include> etiket

Yeniden kullanılabilir bileşeni eklemek istediğiniz düzenin içine <include> etiketi. Örneğin, şuradaki başlık çubuğunu içeren bir düzen verilmiştir: önceki örneğe bakalım:

<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, tüm düzen parametrelerini geçersiz kılabilirsiniz. Herhangi bir android:layout_* özelliklerini kullanarak, dahil edilen düzenin kök görünümünün <include> etiketi. 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 isterseniz ayrıca, android:layout_height ve android:layout_width değerlerini geçersiz kılmak için diğer düzen özelliklerinin geçerli olduğunu unutmayın.

<birleştirme> işlevini kullanma etiket

<merge> etiketi, görünüm hiyerarşinizdeki gereksiz görünüm gruplarını ortadan kaldırmaya yardımcı olur dahil edilir. <merge> için kullanım alanlarından biri, bir ViewGroup genişleterek özel görünüm uygulayın.

Örneğin, ana düzeniniz dikey LinearLayout içinde iki art arda gelen görünümler birden çok düzende yeniden kullanılabilir. Ardından, bu görünümü yerleştirdiğiniz yeniden kullanılabilir düzen iki görünümün kendi kök görünümünün olması gerekir. Ancak kök olarak başka bir LinearLayout kullanılması bir dikey LinearLayout oluşturur. LinearLayout İç içe yerleştirilmiş LinearLayout işlevi yoktur ve yavaş çalışır aşağı tüketirsiniz.

Bunun yerine, özel bir görünüm oluşturmak ve bir düzen XML'si kullanmak için LinearLayout öğesini genişletebilirsiniz ve çocuk görüntülemelerini açıklayın. XML'de en üstteki etiket <merge> LinearLayout, aşağıdaki örnekte gösterildiği gibi:

<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> kullanarak başka bir düzene eklediğinizde etiketiyle birlikte kullanıldığında, sistem <merge> öğesini yoksayar ve iki düğmeyi yerleştirir <include> etiketinin yerine doğrudan düzen içinde gösterilir.

<include> hakkında daha fazla bilgi için bkz. Düzen kaynağı.