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.