İçerme etiketi
<include>
Etiketi, birden fazla dosya halinde düzeni bölmek için olanak sağlar: Bu uğraşan yardımcı karmaşık ya da gereğinden fazla kullanıcı arayüzü.
Diyelim ki iki yerleşim dosyasını kullanarak karmaşık mizanpajınızı şu şekilde böldünüz:
top_level_activity.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<include layout="@layout/include1.xml" />
<!-- Second include file -->
<include layout="@layout/include2.xml" />
</LinearLayout>
Sonra yazmaya gerek include1.xml
ve include2.xml
.
Dan xml basitçe edilir dosyaları dahil olduğunu unutmayın dampingli sizin de top_level_activity
(hemen hemen gibi oluşturma süresini de düzeni #INCLUDE
C için makro).
Include dosyaları düz jane düzeni xml.
include1.xml :
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView1"
android:text="First include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
... ve include2.xml :
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button1"
android:text="Button" />
Görmek? Hiçbir şey fantezi. Hala android ad alanını bildirmeniz gerektiğini unutmayın xmlns:android="http://schemas.android.com/apk/res/android
.
Yani top_level_activity.xml dosyasının işlenmiş hali :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<TextView
android:id="@+id/textView1"
android:text="First include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<!-- Second include file -->
<Button
android:id="@+id/button1"
android:text="Button" />
</LinearLayout>
Java kodunuzda tüm bunlar şeffaftır: findViewById(R.id.textView1)
etkinlik sınıfınızda doğru pencere öğesi döndürülür (bu pencere öğesi etkinlik düzeninden farklı bir xml dosyasında bildirilmiş olsa bile).
Ve üstteki kiraz: görsel editör şeyi yüzerek halleder. Üst düzey mizanpajı dahil xml ile oluşturulur .
Arsa kalınlaşıyor
İçerme dosyası klasik düzen xml dosyası olduğundan, bir üst öğeye sahip olması gerektiği anlamına gelir. Dolayısıyla, dosyanızın birden fazla widget içermesi gerekiyorsa, bir düzen kullanmanız gerekir.
Diyelim ki include1.xml
şimdi iki tane var TextView
: bir düzen bildirilmelidir. Bir tane seçelim LinearLayout
.
include1.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
Top_level_activity.xml olarak sağlanacaktır:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<LinearLayout
android:id="@+id/layout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
<!-- Second include file -->
<Button
android:id="@+id/button1"
android:text="Button" />
</LinearLayout>
Ama iki seviye LinearLayout
fazlalık bekleyin !
Gerçekten de, iç içe geçen iki, LinearLayout
hiçbirine aynı renderleme için TextView
dahil edilebileceği için hiçbir amaca hizmet etmez .layout1
Öyleyse ne yapabiliriz?
Birleştirme etiketini girin
<merge>
Etiket fazlalık sorunları bu tür başa bir üst düzey elemanı sağlar sadece bir kukla etikettir.
Şimdi include1.xml olur:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</merge>
ve şimdi top_level_activity.xml şu şekilde işlenir:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<!-- Second include file -->
<Button
android:id="@+id/button1"
android:text="Button" />
</LinearLayout>
Bir hiyerarşi seviyesi kaydettiniz, işe yaramayan bir görüşten kaçının: Romain Guy zaten daha iyi uyuyor.
Şimdi daha mutlu değil misin?
<TextView />
başka hiçbir şey içermemesini sağlayabilirsiniz .