Bir xml dosyasındaki bir görünümü şişirmek ne anlama gelir?


278

Ben android geliştirme yeniyim ve bir düzen xml dosyasından Şişirme görünümleri referansları rastlamak devam. Google'ı araştırdım ve geliştirme kılavuzunu aradım, ancak yine de bunun ne anlama geldiğini anlayamadım. Birisi çok basit bir örnek verebilirse, çok takdir edilecektir.

Yanıtlar:


257

Bir XML mizanpajı yazdığınızda , Android işletim sistemi tarafından şişirilecek , bu da temelde bellekte görünüm nesnesi oluşturularak oluşturulacağı anlamına gelir. Buna örtülü enflasyon diyelim (OS sizin için görüşü şişirir). Örneğin:

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);
    }
}

Ayrıca, görünümleri açık bir şekilde şişirebilirsiniz LayoutInflater. Bu durumda yapmanız gerekenler:

  1. Şunun bir örneğini alın: LayoutInflater
  2. Şişirilecek XML'yi belirtin
  3. İade edileni kullanın View
  4. İçerik görünümünü döndürülmüş görünümle ayarlama (yukarıda)

Örneğin:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4

24
inflate = rendering ise, onDraw () kullanımı tam olarak nedir?
PypeBros

@sylvainulg, R.id.view xml öğesinin niteliklerini değiştirmek için kullanılır ve şişirmek de aynısını yapabilir. şişirme özellikle özel görünümlerde kullanışlıdır. Tüm xml dosyasını şişirmek için tanıdık setContentView of Activity sınıfı kullanılır. Bir Görünüm, LayoutInflater object.inflate () öğesini kullanarak her Görünümü manuel olarak şişirmelidir. Bir Faaliyetin Yaşam Döngüsü vardır. Bir Görünüm'ün bunun yerine bir çizim döngüsü vardır. inflater, XML dosyasında öngörü düzeni kullanmak yerine özel görünümde özellikle kullanışlıdır.
Sree Rama

@Cristian Lütfen, bana burada bazı tavsiyeler / fikirler verebilir misin goo.gl/E37NSu
eddy

24
Ben şişirme render yerine bence xml dosya içeriğine dayalı bellekte Görünüm nesnesinin gerçek oluşturma oluşturma olduğunu sanmıyorum. Şişirmeden sonra Görünüm bellekte görünmeyebilir.
Ahmed

1
@MattJ. Cevabım kötü bir şekilde ifade edilmiş olabilir. Android edecektir şişirmek değil sadece XML bir yere sahip olarak görünümü, ancak setContentView arayabilir veya el ile düzenini şişirmek. Arama findViewByIdnesnelerini çağırdığınızda , görüntüleme nesneleri zaten bellektir ve bunu yapmanın tek nedeni söz konusu nesneye bir başvuru almaktır (onu değiştirmek veya veriyi çıkarmak).
Cristian

160

Bir görünümü "şişirmek", XML düzenini almak ve görünüm ve görünüm grubu nesnelerini içinde belirtilen öğelerden ve özniteliklerinden oluşturmak için ayrıştırmak ve ardından bu görünümlerin ve görünüm gruplarının hiyerarşisini üst ViewGroup'a eklemek anlamına gelir. SetContentView () öğesini çağırdığınızda, XML okumadan etkinliğe oluşturduğu görünümleri ekler. Ayrıca, pek çok durumda yararlı bir araç olabilecek başka bir ViewGroup'a görünüm eklemek için LayoutInflater'ı da kullanabilirsiniz.


22
bana çok daha doğru bir açıklama gibi geliyor.
19:12

4
Hala "enflasyon" terminolojisiyle biraz kafam karıştı. (Sadece bir şeye hava girmeyi hayal edebilseydim). Ama belki bu yardımcı olacaktır: Sadece bir Ubuntu terminalinde unzip programını çalıştırdım ve "şişirme: X / Y / z.xml" terimini fark ettim. Sanırım gerçekten aynı kavram.
Ben Ogorek

6
Bu durumda "şişirme", çerçevenin XML'den mizanpaj açıklamasını aldığı ve görünüm hiyerarşisini gerçek View nesneleriyle doldurduğu anlamına gelir. Yani, düzeni doldurmak anlamında şişiyor.
jjb

1
@FranciscoCorrales - Tabii. Bu tür bir şey için kullanacağınız en yaygın şey , bir satırı doldurmak istediğiniz bir ListAdapter gibi bir şey içindir . ListAdapter yaklaşımı önermeyen bir şekilde bazı veri nesnesi üzerinde yineleme LinearLayouts gibi şeyler doldurmak için kullandım.
jjb

36

Şişirme , çalışma zamanındaki etkinliğe bir görünüm (.xml) ekleme işlemidir. Bir listView oluşturduğumuzda, öğelerinin her birini dinamik olarak şişiririz. Düğmeler ve metin görünümü gibi birden çok görünüme sahip bir ViewGroup oluşturmak istiyorsak, şöyle oluşturabiliriz:

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...

Ardından, yukarıdaki görünümleri ekleyebileceğimiz bir düzen oluşturmalıyız:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

Ve şimdi sağ köşeye bir düğme ve altta bir metin görünümü eklemek istiyorsak, çok fazla iş yapmalıyız. İlk olarak görünüm özelliklerini somutlaştırarak ve sonra birden fazla kısıtlama uygulayarak. Bu zaman alıcıdır.

Android, basit bir .xml oluşturmamızı ve stilini ve niteliklerini xml'de tasarlamamızı ve ardından programlı olarak sınırlamaların acısı olmadan onu ihtiyaç duyduğumuz her yerde şişirmeyi kolaylaştırır.

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);

El ile nasıl yapacağınızı göstererek enflasyonun gerçekte ne olduğunu tarif etmeyi seviyorum.
Daniel

1
İnflate'nin attachToRoot parametresi ne anlama geliyor?
flz


5

Burada "görünümü şişirme" o xml dosyasında belirtilen bir görünüm çizim ve oluşturulan View ile POP viewing (= şişirme) düzeni.xml dosyasını getirme anlamına gelir düşünüyorum.


4

Enflasyon için sıradan bir tanım, XML kodunu Java koduna dönüştürmek olabilir. Örneğin XML'de bir etiketimiz varsa, işletim sisteminin bellekte karşılık gelen bir Java nesnesi oluşturması gerekir, bu nedenle inflatter XML etiketlerini okur ve Java'da karşılık gelen nesneleri oluşturur.


2

UI'yi XML'e dönüştürdüğümüzden, ancak görüntüleme nesnelerini gösterdiğimizden, xml'yi görüntüleme nesnelerine dönüştürmemiz gerekiyor, bu nedenle şişirme, xml'yi görüntüleme nesnelerine dönüştürdüğümüz anlamına gelir, bunun için düzen şişirme hizmeti adı verilen bir hizmete ihtiyacımız var ve bir xml verin ve sizin için dönüştürülecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.