Apa gunanya LayoutInflater
di Android?
android
layout-inflater
android-inflate
pengguna386430
sumber
sumber
Jawaban:
Saat Anda menggunakan tampilan khusus di,
ListView
Anda harus menentukan tata letak baris. Anda membuat xml tempat Anda meletakkan widget android dan kemudian dalam kode adaptor Anda harus melakukan sesuatu seperti ini:Baca lebih lanjut di dokumentasi resmi .
sumber
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
itu, meskipun menjelaskan di mana menggunakannya. Jawaban 1-bawah lebih baik.Kelas LayoutInflater digunakan untuk instantiate isi file XML layout ke objek View yang sesuai.
Dengan kata lain, dibutuhkan file XML sebagai input dan membangun objek View darinya.
sumber
single_list_item.xml
file untuk setiap baris aListView
. Apakah penggunaan file XML itu seperti inflater?Apa yang
LayoutInflator
harus dilakukanKetika saya pertama kali memulai pemrograman Android, saya benar-benar bingung oleh
LayoutInflater
danfindViewById
. Terkadang kami menggunakan satu dan terkadang yang lain.LayoutInflater
digunakan untuk membuat objek baruView
(atauLayout
) dari salah satu tata letak xml Anda.findViewById
hanya memberi Anda referensi ke tampilan daripada yang telah dibuat. Anda mungkin berpikir bahwa Anda belum membuat pandangan, tapi setiap kali Anda meneleponsetContentView
dionCreate
, tata letak aktivitas bersama dengan subviews nya akan meningkat (diciptakan) di belakang layar.Jadi jika tampilan sudah ada, maka gunakan
findViewById
. Jika tidak, maka buatlah dengan aLayoutInflater
.Contoh
Ini adalah proyek mini yang saya buat yang menunjukkan keduanya
LayoutInflater
danfindViewById
sedang beraksi. Tanpa kode khusus, tata letaknya seperti ini.Kotak biru adalah tata letak khusus dimasukkan ke dalam tata letak utama dengan
include
(lihat di sini untuk lebih lanjut). Itu meningkat secara otomatis karena itu adalah bagian dari tampilan konten. Seperti yang Anda lihat, tidak ada yang spesial dari kode ini.Sekarang mari kita mengembang (membuat) salinan tata letak khusus kita dan menambahkannya.
Untuk mengembang tata letak tampilan baru, semua yang saya lakukan adalah memberi tahu inflater nama file xml saya (
my_layout
), tata letak induk yang ingin saya tambahkan (mainLayout
), dan bahwa saya sebenarnya belum ingin menambahkannya (false
) . (Saya juga bisa mengatur induk kenull
, tetapi kemudian parameter tata letak tampilan root tata letak kustom saya akan diabaikan.)Ini lagi dalam konteks.
Perhatikan bagaimana
findViewById
digunakan hanya setelah tata letak telah meningkat.Kode Tambahan
Berikut ini adalah xml untuk contoh di atas.
activity_main.xml
my_layout.xml
Kapan Anda membutuhkan LayoutInflater
RecyclerView
. (LihatRecyclerView
contoh - contoh ini untuk daftar atau kisi .) Anda harus mengembang tata letak baru untuk setiap item yang terlihat dalam daftar atau kisi.sumber
myLayout
adalah View, meskipun saya bisa menggelembungkannya sebagai RelativeLayout (lihat my_layout.xml). Setelah meningkat saya menambahkannya sebagai subview dari induk LinearLayout (yaitu,mainLayout
).LayoutInflater.inflate () menyediakan sarana untuk mengonversi file res / layout / *. Xml yang mendefinisikan tampilan menjadi objek Tampilan aktual yang dapat digunakan dalam kode sumber aplikasi Anda.
dasar dua langkah: ambil inflater dan kemudian kembangkan sumber daya
Bagaimana Anda mendapatkan inflater?
Bagaimana Anda mendapatkan tampilan dengan asumsi file xml adalah "list_item.xml"?
sumber
Berikut adalah contoh lain yang mirip dengan yang sebelumnya, tetapi diperluas untuk lebih menunjukkan parameter mengembang dan perilaku dinamis yang dapat diberikan.
Misalkan tata letak baris ListView Anda dapat memiliki jumlah variabel TextViews. Jadi pertama-tama Anda mengembang tampilan item dasar (seperti contoh sebelumnya), dan kemudian loop secara dinamis menambahkan TextViews pada saat run-time. Menggunakan android: layout_weight juga meluruskan segalanya dengan sempurna.
Berikut adalah sumber daya Tata Letak:
list_layout.xml
schedule_layout.xml
Mengganti metode getView dalam ekstensi kelas BaseAdapter
Perhatikan panggilan metode mengembang yang berbeda:
sumber
Kelas ini digunakan untuk instantiate tata letak file XML ke
View
objek yang sesuai . Itu tidak pernah digunakan secara langsung - gunakangetLayoutInflater()
ataugetSystemService(String)
untuk mengambilLayoutInflater
contoh standar yang sudah terhubung ke konteks saat ini dan dikonfigurasi dengan benar untuk perangkat yang Anda jalankan. Sebagai contoh:Referensi: http://developer.android.com/reference/android/view/LayoutInflater.html
sumber
Menggembungkan berarti membaca file XML yang menggambarkan tata letak (atau elemen GUI) dan untuk membuat objek aktual yang sesuai dengannya, dan dengan demikian membuat objek tersebut terlihat dalam aplikasi Android.
File ini dapat disimpan sebagai date_time_dialog.xml :
File ini dapat disimpan sebagai date_time_picker.xml :
The
MainActivity
kelas disimpan sebagai MainActivity.java :sumber
Apa yang inflater lakukan?
Dibutuhkan tata letak xml sebagai input (katakanlah) dan mengubahnya menjadi objek Lihat.
Mengapa dibutuhkan
Mari kita pikirkan skenario di mana kita perlu membuat tampilan daftar kustom. Sekarang setiap baris harus dibuat khusus. Tetapi bagaimana kita bisa melakukannya. Tidak mungkin untuk menetapkan tata letak xml ke deretan tampilan daftar. Jadi, kami membuat objek View. Dengan demikian kita dapat mengakses elemen di dalamnya (tampilan teks, tampilan gambar dll) dan juga menetapkan objek sebagai deretan tampilan daftar
Jadi, setiap kali kita perlu menetapkan objek jenis tampilan di suatu tempat dan kami memiliki desain xml kustom kami, kami hanya mengubahnya ke objek oleh inflater dan menggunakannya.
sumber
LayoutInflater adalah kelas yang digunakan untuk instantiate file XML layout ke objek tampilan terkait yang dapat digunakan dalam program Java. Secara sederhana, ada dua cara untuk membuat UI di android. Yang satu adalah cara statis dan yang lainnya dinamis atau terprogram. Misalkan kita memiliki tata letak sederhana main.xml memiliki satu
textview
dan satuedittext
sebagai berikut.Kita dapat menampilkan tata letak ini dengan cara statis
Cara dinamis membuat tampilan berarti tampilan tidak disebutkan dalam main.xml kami, tetapi kami ingin menampilkannya dalam waktu berjalan. Misalnya, kami memiliki folder tata letak XML lain sebagai footer.xml
Kami ingin menampilkan kotak teks ini dalam jangka waktu dalam UI utama kami. Jadi di sini kita akan mengembang text.xml. Lihat bagaimana:
Di sini saya telah menggunakan getSystemService (String) untuk mengambil contoh LayoutInflater. Saya juga bisa menggunakan getLayoutInflator () untuk mengembang daripada menggunakan getSystemService (String) seperti di bawah ini:
sumber
di sini adalah contoh untuk mendapatkan referensi untuk tampilan root dari tata letak, menggembungkannya dan menggunakannya dengan setContentView (tampilan tampilan)
sumber
Layout inflater adalah kelas yang membaca deskripsi penampilan xml dan mengubahnya menjadi objek tampilan berbasis java.
sumber
daftar penyesuaian saya harap ini menggambarkan konsep
sumber
LayoutInflater adalah komponen mendasar dalam Android. Anda harus menggunakannya setiap saat untuk mengubah file xml menjadi hierarki tampilan.
sumber
LayoutInflater membuat objek View berdasarkan tata letak yang didefinisikan dalam XML. Ada beberapa cara berbeda untuk menggunakan LayoutInflater, termasuk membuat Tampilan kustom, menggembungkan tampilan Fragmen ke dalam tampilan Aktivitas, membuat Dialog, atau hanya menggembungkan tampilan file tata letak ke dalam suatu Aktivitas.
Ada banyak kesalahpahaman tentang bagaimana proses inflasi bekerja. Saya pikir ini berasal dari buruknya dokumentasi untuk metode mengembang (). Jika Anda ingin mempelajari tentang metode mengembang () secara rinci, saya menulis posting blog di sini:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
sumber
Inflater sebenarnya semacam konversi ke data, tampilan, contoh, untuk representasi UI yang terlihat ... ..ini memanfaatkan umpan data dari dari mungkin adaptor, dll. Secara terprogram. kemudian mengintegrasikannya dengan xml yang Anda tetapkan, yang memberi tahu bagaimana data harus diwakili di UI
sumber