Apa artinya mengembang tampilan dari file xml?

278

Saya baru mengenal pengembangan Android dan terus menemukan referensi untuk menggembungkan tampilan dari file xml layout. Saya mencari di Google dan mencari panduan pengembangan tetapi masih tidak dapat memahami apa artinya. Jika seseorang dapat memberikan contoh yang sangat sederhana, itu akan sangat dihargai.

Brendan Weinstein
sumber

Jawaban:

257

Saat Anda menulis tata letak XML, itu akan meningkat oleh OS Android yang pada dasarnya berarti akan dirender dengan membuat objek tampilan di memori. Sebut itu inflasi implisit (OS akan mengembang tampilan untuk Anda). Misalnya:

class Name extends Activity{
    public void onCreate(){
         // the OS will inflate the your_layout.xml
         // file and use it for this activity
         setContentView(R.layout.your_layout);
    }
}

Anda juga dapat mengembang tampilan secara eksplisit dengan menggunakan LayoutInflater. Dalam hal ini Anda harus:

  1. Dapatkan contoh dari LayoutInflater
  2. Tentukan XML yang akan diembang
  3. Gunakan yang dikembalikan View
  4. Atur tampilan konten dengan tampilan yang dikembalikan (di atas)

Misalnya:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4
Cristian
sumber
24
jika mengembang = rendering, lalu apa gunanya onDraw (), tepatnya?
PypeBros
@sylvainulg, The R.id.view digunakan untuk mengubah atribut elemen xml dan mengembang dapat melakukan hal yang sama. menggembungkan sangat berguna dalam tampilan khusus. Untuk mengembang seluruh file xml, setContentView aktivitas kelas yang akrab digunakan. Tampilan harus mengembang setiap tampilan secara manual menggunakan LayoutInflater object.inflate (). Suatu Kegiatan memiliki Siklus Hidup. Sebaliknya, Tampilan memiliki siklus undian. Inflater berguna khususnya dengan tampilan khusus alih-alih menggunakan tata letak bawaan dalam file XML.
Sree Rama
@ Kristen Tolong, apakah Anda pikir Anda bisa memberi saya beberapa saran / ide di sini goo.gl/E37NSu
eddy
24
Saya tidak berpikir menggembungkan rendering bukan menggembungkan sebenarnya adalah pembuatan objek Lihat dalam memori berdasarkan pada isi file xml. Setelah mengembang, tampilan akan berada dalam memori yang belum tentu terlihat.
Ahmed
1
@ MatJ. Baiklah, jawaban saya mungkin tidak tepat. Android akan mengembang tampilan tidak hanya dengan memiliki XML di suatu tempat, tetapi ketika Anda memanggil setContentView atau secara manual mengembang tata letak. Pada saat Anda memanggil findViewByIdobjek tampilan sudah ada dalam memori, dan satu-satunya alasan Anda melakukannya adalah untuk mendapatkan referensi ke objek tertentu (baik untuk mengubahnya atau mengambil data dari itu).
Cristian
160

"Menggembungkan" tampilan berarti mengambil tata letak XML dan menguraikannya untuk membuat objek tampilan dan viewgroup dari elemen dan atributnya yang ditentukan di dalam, dan kemudian menambahkan hierarki tampilan dan viewgroup tersebut ke induk ViewGroup. Saat Anda memanggil setContentView (), itu melampirkan tampilan yang dibuatnya dari membaca XML ke aktivitas. Anda juga bisa menggunakan LayoutInflater untuk menambahkan tampilan ke ViewGroup lain, yang bisa menjadi alat yang berguna dalam banyak keadaan.

jjb
sumber
22
itu terdengar seperti deskripsi yang jauh lebih akurat bagi saya.
PypeBros
4
Saya sendiri masih agak bingung dengan terminologi "inflasi". (Jika saya hanya bisa berhenti membayangkan udara masuk ke sesuatu). Tapi mungkin ini akan membantu: Saya baru saja menjalankan program unzip di terminal Ubuntu dan memperhatikan terminologi: "menggembungkan: X / Y / z.xml." Saya kira konsepnya benar-benar sama.
Ben Ogorek
6
"Menggembungkan" dalam hal ini berarti bahwa kerangka kerja mengambil deskripsi tata letak dari XML dan mengisi hirarki tampilan dengan objek Lihat yang sebenarnya. Jadi, itu menggembung dalam arti mengisi tata letak.
jjb
1
@FranciscoCorrales - Tentu. Hal paling umum yang Anda gunakan untuk hal ini adalah untuk sesuatu seperti ListAdapter , tempat Anda ingin mengisi satu baris. Saya telah menggunakannya untuk mengisi hal-hal seperti LinearLayouts, iterasi beberapa objek data dengan cara yang tidak menyarankan pendekatan ListAdapter.
jjb
36

Menggembungkan adalah proses menambahkan tampilan (.xml) ke aktivitas saat runtime. Saat kami membuat listView, kami mengembang setiap itemnya secara dinamis. Jika kita ingin membuat ViewGroup dengan banyak tampilan seperti tombol dan tampilan teks, kita dapat membuatnya seperti:

Button but = new Button();
but.setText ="button text";
but.background ...
but.leftDrawable.. and so on...

TextView txt = new TextView();
txt.setText ="button text";
txt.background ... and so on...

Maka kita harus membuat tata letak tempat kita dapat menambahkan tampilan di atas:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

Dan sekarang jika kita ingin menambahkan tombol di sudut kanan dan tampilan teks di bagian bawah, kita harus melakukan banyak pekerjaan. Pertama dengan instantiating properti tampilan dan kemudian menerapkan beberapa kendala. Ini menghabiskan waktu.

Android memudahkan kita untuk membuat .xml sederhana dan mendesain gaya serta atributnya dalam xml dan kemudian cukup mengembang di mana pun kita membutuhkannya tanpa kesulitan menetapkan batasan secara programatik.

LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);
//now add menuLayout to wherever you want to add like

(RelativeLayout)findViewById(R.id.relative).addView(menuLayout);
Zar E Ahmer
sumber
Saya suka bagaimana Anda menggambarkan inflasi apa yang sebenarnya, dengan menunjukkan bagaimana Anda akan melakukannya secara manual.
Daniel
1
Apa arti dari attachtoRoot parameter mengembang itu?
flz
Lihat detail jawaban stackoverflow.com/questions/12567578/…
Zar E Ahmer
5

Saya pikir di sini "menggembungkan tampilan" berarti mengambil file layout.xml menggambar tampilan yang ditentukan dalam file xml dan MEMULAI (= menggembungkan) induk viewGroup dengan tampilan yang dibuat.

Jaydeep Ranipa
sumber
4

Definisi awam untuk inflasi mungkin untuk mengkonversi kode XML ke kode Java. Hanya cara untuk memahami, misalnya, jika kita memiliki tag dalam XML, OS harus membuat objek Java yang sesuai dalam memori, jadi inflatter membaca tag XML, dan membuat objek yang sesuai di Java.

pengguna3458211
sumber
2

Karena kita membuat UI menjadi XML tetapi objek tampilan adalah apa yang kita tampilkan sehingga kita perlu mengubah xml menjadi objek tampilan sehingga menggembungkan berarti kita mengubah xml menjadi objek tampilan sehingga dapat ditampilkan, untuk ini kita memerlukan layanan yang disebut layanan tata letak inflator dan berikan xml dan itu akan dikonversi untuk Anda.

Elang Hitam
sumber