SORU
17 ŞUBAT 2011, PERŞEMBE


Yapma Layoutİnflater duygusu

Ciddi bir sorun beklendiği gibi çalışmaya Layoutİnflater almak zorundaydım, ve diğer insanlar (help-for-using-layoutinflator-to-add-views-at-runtime).

Yinelenen soru: neden Layoutİnflater belirtilen ettim düzen parametreleri görmezden mi geliyor? E. g. neden benim layout_width ve layout_height değerlerini kaynaklardan onur değil XML.

CEVAP
17 ŞUBAT 2011, PERŞEMBE


Bu sorun, LayoutInflater docs Yönlendirme ve küçük bir örnek demo proje kurma hakkında küçük bir araştırma yaptım. Aşağıdaki öğreticiler dinamik bir düzen doldurmak için nasıl LayoutInflater kullanarak gösterir.

LayoutInflater.inflate() parametreleri neye başlamadan önce bkz

  • kaynak: Yük (örneğin, R.layout.main_page) XML düzeni bir kaynak KİMLİĞİ
  • kökİsteğe bağlı görüntülemek için ebeveyn oluşturulan hiyerarşi (attachToRoot true), yoksa sadece bir nesne sağlar bir set LayoutParams değerleri için kök iade hiyerarşi (attachToRoot false.)
  • attachToRoot: İster şişirilmiş hiyerarşi kök parametresi eklenmelidir? Eğer yanlış, sadece root XML kök görüntülemek için LayoutParams doğru alt sınıf oluşturmak için kullanılır.

  • Verir: Kök şişirilmiş hiyerarşi Görünümü. Kök sağlanmadı ve attachToRoot true, eğer bu kök; aksi halde şişirilmiş XML dosyasının kök.

Örnek düzeni ve kodu için şimdi.

Ana düzeni (main.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</LinearLayout>

Eğer düzen parametreleri başarıyla XML (red.xml) uygulanmışsa: bu kabın içine ilave edilir ayrı bir TextView, küçük kırmızı bir daire olarak görünür

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:background="#ff0000"
    android:text="red" />

Şimdi LayoutInflater arama parametreleri çeşitli varyasyonları ile kullanılır

public class InflaterTest extends Activity {

    private View view;

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);
      ViewGroup parent = (ViewGroup) findViewById(R.id.container);

      // result: layout_height=wrap_content layout_width=match_parent
      view = LayoutInflater.from(this).inflate(R.layout.red, null);
      parent.addView(view);

      // result: layout_height=100 layout_width=100
      view = LayoutInflater.from(this).inflate(R.layout.red, null);
      parent.addView(view, 100, 100);

      // result: layout_height=25dp layout_width=25dp
      // view=textView due to attachRoot=false
      view = LayoutInflater.from(this).inflate(R.layout.red, parent, false);
      parent.addView(view);

      // result: layout_height=25dp layout_width=25dp 
      // parent.addView not necessary as this is already done by attachRoot=true
      // view=root due to parent supplied as hierarchy root and attachRoot=true
      view = LayoutInflater.from(this).inflate(R.layout.red, parent, true);
    }
}

Parametre değişimleri gerçek sonuçları kodu belgelenmiştir.

ÖZET:Kök neden şişirmek için belirtmeden LayoutInflater arama düzeni parametreleri görmezden XML arıyor. Arama şişirmek ile kök eşit değil null attachRoot=true mu yük düzeni parametreleri, ama döner kök nesne bir daha, hangi engeller daha fazla düzen değişiklikleri yüklenen nesne (tabii bulabilirsen kullanma findViewById()). Büyük olasılıkla kullanmak ister çağırma bu nedenle bu bir

loadedView = LayoutInflater.from(context)
                .inflate(R.layout.layout_to_load, parent, false);

Düzeni konularında yardımcı olacak, hierarchy viewer şiddetle tavsiye edilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • CodingMadeEasy

    CodingMadeEa

    25 EYLÜL 2010
  • TechSmartt

    TechSmartt

    29 Aralık 2010