2011-07-12 6 views
57

kök doğrusal düzeni içindeDoğrusal bir düzen için dinamik olarak içerik ekleme?</p> <p><strong>main.xml</strong>: örneğin Kimin yönelimi dikey bir kök doğrusal düzeni tanımladıysanız

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/my_root" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 

    <!-- I would like to add content here dynamically.--> 

</LinearLayout> 

, birden çocuk doğrusal düzenleri eklemek istiyorum, alt doğrusal düzen yöneliminin her biri yatay'dir. Bütün bunlarla birlikte çıktı gibi bir tabloyla sonuçlanabilirdim. Çocuk doğrusal düzenleri ve bunların içeriklerinin sayısı oldukça dinamik olduğu için

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/my_root" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 

    <!-- 1st child (1st row)--> 
    <LinearLayout 
     ... 
     android:orientation="horizontal"> 

      <TextView .../> 
      <TextView .../> 
      <TextView .../> 
    </LinearLayout> 

    <!-- 2nd child (2nd row)--> 
    ... 
</LinearLayout> 

, ben programlı kök doğrusal düzeni içerik eklemeye karar ettik: çocuk gibi düzen ile örnek kökü için

.

İkinci düzen ilk olarak programatik olarak eklenebilir, bu da her bir alt öğenin tüm düzen niteliklerini ayarlayabilir ve alt öğede daha fazla öğe ekleyebilir? senin onCreate() yılında

cevap

75

, yazma

LinearLayout myRoot = (LinearLayout) findViewById(R.id.my_root); 
LinearLayout a = new LinearLayout(this); 
a.setOrientation(LinearLayout.HORIZONTAL); 
a.addView(view1); 
a.addView(view2); 
a.addView(view3); 
myRoot.addView(a); 

view1, view2 ve view3 sizin TextView ler şunlardır. Programatik olarak kolayca oluşturulurlar.

+1

Bunun neden olduğunu bilen var mı? Neden bu LinearLayout'u uzatırsa, this.addView (view1) yapamıyorum? – MegaWidget

+0

Bu tamamen yerinde değil, ancak kodunuzu vurguladığımda, 4 satırın hepsinin aynı sütunda bitmesini inanılmaz derecede tatmin edici buluyorum. Sadece bu sebepten dolayı kazancımı kazandın. – RobotKarel314

+0

Güzel, ama ne zaman kullanmalıyım ve bunun yerine TableLayout'u kullanmalıyım? Bu sadece kişisel bir zevk meselesi mi? – Zerato

61
LinearLayout layout = (LinearLayout)findViewById(R.id.layout); 
View child = getLayoutInflater().inflate(R.layout.child, null); 
layout.addView(child); 
+1

böyle yaparsak. "Layout.child" içindeki tıklama etkinliklerini nasıl ele alabiliriz? – Warapitiya

+2

@Warapitiy Öğeyi almak ve onclick dinleyicisini ayarlamak için 'child.findViewById' öğesini kullanın. – Choxmi

5

Böyle basamaklı LinearLayout elde edebilirsiniz:

LinearLayout root = (LinearLayout) findViewById(R.id.my_root);  
LinearLayout llay1 = new LinearLayout(this);  
root.addView(llay1); 
LinearLayout llay2 = new LinearLayout(this);  
llay1.addView(llay2); 
İlgili konular