<merge/>
berguna karena dapat menghilangkan ViewGroup yang tidak dibutuhkan, yaitu tata letak yang hanya digunakan untuk membungkus pandangan lain dan tidak melayani tujuan itu sendiri.
Misalnya, jika Anda <include/>
menggunakan tata letak dari file lain tanpa menggunakan penggabungan, kedua file tersebut mungkin terlihat seperti ini:
layout1.xml:
<FrameLayout>
<include layout="@layout/layout2"/>
</FrameLayout>
layout2.xml:
<FrameLayout>
<TextView />
<TextView />
</FrameLayout>
yang secara fungsional setara dengan tata letak tunggal ini:
<FrameLayout>
<FrameLayout>
<TextView />
<TextView />
</FrameLayout>
</FrameLayout>
FrameLayout di layout2.xml mungkin tidak berguna. <merge/>
membantu menyingkirkannya. Inilah yang terlihat seperti menggunakan gabungan (layout1.xml tidak berubah):
layout2.xml:
<merge>
<TextView />
<TextView />
</merge>
Ini secara fungsional setara dengan tata letak ini:
<FrameLayout>
<TextView />
<TextView />
</FrameLayout>
tetapi karena Anda menggunakan <include/>
Anda dapat menggunakan kembali tata letak di tempat lain. Itu tidak harus digunakan untuk mengganti hanya FrameLayouts - Anda dapat menggunakannya untuk mengganti tata letak yang tidak menambahkan sesuatu yang berguna dengan cara tampilan / perilaku Anda.
<TextView />
, tidak ada yang lain.Tag sertakan
The
<include>
tag memungkinkan Anda untuk membagi tata letak Anda menjadi beberapa file: membantu berurusan dengan kompleks antarmuka pengguna atau terlalu lama.Misalkan Anda membagi tata letak kompleks Anda menggunakan dua file sertakan sebagai berikut:
top_level_activity.xml :
Maka Anda perlu menulis
include1.xml
daninclude2.xml
.Perlu diingat bahwa xml dari file include hanya dibuang di
top_level_activity
tata letak Anda pada waktu rendering (seperti#INCLUDE
makro untuk C).File yang disertakan adalah tata letak jane polos xml.
include1.xml :
... dan include2.xml :
Lihat? Tidak ada yang mewah. Perhatikan bahwa Anda masih harus mendeklarasikan namespace android dengan
xmlns:android="http://schemas.android.com/apk/res/android
.Jadi versi rendering dari top_level_activity.xml adalah:
Dalam kode java Anda, semua ini transparan:
findViewById(R.id.textView1)
di kelas aktivitas Anda mengembalikan widget yang benar (bahkan jika widget itu dinyatakan dalam file xml berbeda dari tata letak aktivitas).Dan ceri di atas: editor visual menangani hal itu dengan berenang. Tata letak tingkat atas dirender dengan xml disertakan.
Plotnya menebal
Karena file include adalah file xml layout klasik, itu berarti file tersebut harus memiliki satu elemen teratas. Jadi jika file Anda perlu memasukkan lebih dari satu widget, Anda harus menggunakan tata letak.
Katakanlah
include1.xml
sekarang ada duaTextView
: tata letak harus dideklarasikan. Mari kita pilih aLinearLayout
.include1.xml :
The top_level_activity.xml akan diberikan sebagai:
Tapi tunggu dua level
LinearLayout
itu mubazir !Memang, dua bersarang
LinearLayout
tidak memiliki tujuan karena keduanyaTextView
dapat dimasukkan di bawahlayout1
untuk rendering yang sama persis .Jadi apa yang bisa kita lakukan?
Masukkan tag gabungan
The
<merge>
tag hanya tag boneka yang menyediakan elemen tingkat atas untuk menangani jenis masalah redundansi.Sekarang include1.xml menjadi:
dan sekarang top_level_activity.xml diberikan sebagai:
Anda menyimpan satu tingkat hierarki, menghindari satu tampilan yang tidak berguna: Romain Guy sudah tidur lebih baik.
Apakah kamu tidak lebih bahagia sekarang?
sumber
RelativeLayout
atau menggambar tampilan secara manualblazeroni sudah membuatnya cukup jelas, saya hanya ingin menambahkan beberapa poin.
<merge>
digunakan untuk mengoptimalkan tata letak. Ini digunakan untuk mengurangi tidak perlu bersarang.<merge>
tag ditambahkan ke tata letak lain,<merge>
simpul dihapus dan tampilan anaknya ditambahkan langsung ke induk baru.sumber
Untuk memiliki pengetahuan yang lebih mendalam tentang apa yang terjadi, saya membuat contoh berikut. Lihatlah file activity_main.xml dan content_profile.xml .
activity_main.xml
content_profile.xml
Di sini, seluruh file tata letak ketika meningkat terlihat seperti ini.
Lihat bahwa ada LinearLayout di dalam induknya LinearLayout yang tidak melayani tujuan apa pun dan berlebihan. Melihat tata letak melalui alat Tata Letak Inspektur dengan jelas menjelaskan hal ini.
content_profile.xml setelah memperbarui kode untuk menggunakan gabungan alih-alih ViewGroup seperti LinearLayout.
Sekarang tata letak kita terlihat seperti ini
Di sini kita melihat bahwa ViewGroup LinearLayout yang berlebihan dihilangkan. Sekarang alat Layout Inspector memberikan hierarki tata letak berikut.
Jadi selalu mencoba menggunakan penggabungan ketika tata letak induk Anda dapat memposisikan tata letak anak Anda, atau lebih tepatnya menggunakan penggabungan ketika Anda memahami bahwa akan ada grup tampilan yang berlebihan dalam hierarki.
sumber
Alasan lain untuk menggunakan penggabungan adalah ketika menggunakan grup tampilan khusus di ListViews atau GridViews. Alih-alih menggunakan pola viewHolder dalam adaptor daftar, Anda dapat menggunakan tampilan kustom. Tampilan kustom akan mengembang xml yang root adalah tag gabungan. Kode untuk adaptor:
di sini adalah viewgroup khusus:
dan ini XML-nya:
sumber