2010-03-07 12 views
126

için Görüntüleme ekleme ve Java kodundan benim programda, buna bir görünümü eklemek istiyorum. Bunun için hangi yöntem kullanılır? Bilmediğim XML'de nasıl yapıldığını sormuyorum, bunun yerine, bu hat boyunca nasıl bir şey yapabilirim?nasıl Programlı ı bir LinearLayout var diyelim Görünümler

(Bir Görünüm) .Add (Another View)

bir Swing yapabileceği gibi.

cevap

19

, addView adlı bir yöntemi olan bir alt sınıftır. addView yöntemi, peşinde olduğunuz şey olmalıdır. addView çağrılması

186

Doğru cevap, ancak bunu işe almak için bundan biraz daha yapmak gerekir.

Bir yapıcı üzerinden bir görünümü oluşturursanız (örneğin Button myButton = new Button();), size yeni inşa çocuğu eklemeden önce, ebeveyn görünümün LayoutParams iç sınıf örneğine geçen, yeni inşa görünümde setLayoutParams aramak gerekir Ebeveyn görünümüne

LinearLayout myLayout = findViewById(R.id.main); 

Button myButton = new Button(this); 
myButton.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT, 
            LinearLayout.LayoutParams.MATCH_PARENT)); 

myLayout.addView(myButton); 

LayoutParams önemlidir ayarlamak için emin olmak:

Örneğin, sizin LinearLayout varsayarak onCreate() işlevi aşağıdaki kodu olabilir kimliği R.id.main sahiptir. Her görünümün en az bir layout_width ve bir layout_height parametresine ihtiyacı vardır. Doğru iç sınıfı da almak önemlidir. Ben çocuk görünümün setLayoutParams için TableRow.LayoutParams bir örneğini geçen olmadığını çözene kadar düzgün görüntülemek için bir TableRow eklenen Görüntüleme alma ile mücadele etti.

+3

nasıl görünümü progra yaratacak mmatically ama bu yeni görünüm için özellikle yazdıysanız bir XML düzen dosyası kullanarak? – SK9

+8

@ SK9 Bir Bağlamdan, genellikle geçerli Etkinlikten alabileceğiniz bir LayoutInflater kullanırsınız. Bir şey gibi: LayoutInflater myInflater = getLayoutInflater; Görünüm Myview = myInflater.inflate (R.layout.myLayout, üst, yalancı); –

+0

Aslında getLayoutInflater() Pencere sınıfı (değil Bağlam) gelir, ve bu Aktivite bir kolaylık yöntemidir. –

15

Bu geç ama bu kişiye yardım edebilir :) :) görünümü eklemek için programlı programmatcally tüm görünüm yaratacaktır

LinearLayout rlmain = new LinearLayout(this);  
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);   
LinearLayout ll1 = new LinearLayout (this); 

ImageView iv = new ImageView(this); 
iv.setImageResource(R.drawable.logo);    
LinearLayout .LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 

iv.setLayoutParams(lp); 
ll1.addView(iv); 
rlmain.addView(ll1);    
setContentView(rlmain, llp); 

Bu gibi deneyin. Herhangi bir sayıyı aynı şekilde ekleyebilirsiniz. Umarım bu yardımcı olabilir. :) henüz ilgilenen herkes için

34

: buldum

iyi yolu View şişirmek statik yöntemini kullanmaktır. yourViewXML bunu olarak

(aklınıza gelebilecek herhangi bir düzen olan) bir görünüm eklemek için bir ViewGroup ihtiyaç olduğunu fark edin R.layout.myView

gibi bir şey

View inflatedView = View.inflate(context, yourViewXML, yourLinearLayout); 

bir örnek, zaten şişirilmiş görünümüne bir fragman var ve kök görünümü bir düzen olduğunu biliyoruz diyelim ve buna bir görünüm eklemek istiyorum:

View view = getView(); // returns base view of the fragment 
    if (view == null) 
     return; 
    if (!(view instanceof ViewGroup)) 
     return; 

    ViewGroup viewGroup = (ViewGroup) view; 
    View popup = View.inflate(viewGroup.getContext(), R.layout.someView, viewGroup); 
+0

Ayrıca, "viewViewById (int resourceID)" kullanılarak bulunan bir görünümü alacak ya da şişirilmiş olan addView (Görünüm v) {// kodunuzu görünümünüzü alın}} gibi statik bir yöntem yazabilirsiniz. 'inflatedView' gibi… sadece parça örneğinizi genişletmek için. – zgc7009

İlgili konular