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
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 setLayoutParams
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.
Objective-C dizisi yapma...
Karışıklık JavaGit, JGit ve Eğit arası...
'in Eclipse yapma Java kod biçiml...
Yapma Eclipse, Visual Studio gibi davr...
matplotlib grafik yapma varsayılan ola...