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. Tam sayfa düzenlerini verimli bir şekilde yeniden kullanmak için <include>
ve <merge>
etiketlerini kullanarak bir düzeni diğerine yerleştirin.
Bu, evet veya hayır düğmesi paneli veya açıklama metni içeren özel bir ilerleme çubuğu gibi karmaşık düzenler oluşturmanıza olanak tanır. 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 bağımsız 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 bir 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 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 (tüm android:layout_*
özellikleri) <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>
'ün kullanım alanlarından biri, bir ViewGroup
'ü genişleterek özel bir görünüm uygulamaktır.
Örneğin, ana düzeniniz art arda gelen iki görünümün birden fazla düzende yeniden kullanılabildiği bir dikey LinearLayout
ise iki görünümü yerleştirdiğiniz yeniden kullanılabilir düzende kendi kök görünümünün olması 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
'ü genişletebilir ve alt görünümlerini tanımlamak için bir düzen XML'i 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 dahil ettiğinizde sistem, <merge>
öğesini yoksayıp 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.