2012-09-14 8 views
7

Bir TextView içeren bir LinearLayout var ve her zaman olacak. Her zaman TextView'un altında en az bir düğme bulunacak, ancak belirli durumlarda birden fazla olabilir.XML düzenini şablon olarak kullanarak android düğmeleri oluşturma

Program aracılığıyla gereken sayıda düğmeyi başarıyla oluşturabilir ve ekleyebilirim. Ayrıca, bu düğmeler için programatik olarak gerekli olan görüntü ile ilgili parametreleri/seçenekleri ne olursa olsun başarıyla ayarlayabilirim.

Sorun, program aracılığıyla oluşturulan bir düğmenin, bu parametreleri programsal olarak ayarlamak yerine, görünüm ve düzen parametrelerini içeren bir XML kaynak dosyası kullanması gerektiğini nasıl bileceğimi bilmemesidir.

Benzer şekilde adlandırılmış sorulara baktım ve zamanın API'siyle uğraşarak zaman harcadım.

Düzenleme:

fragman için My XML düzeni dosyası şuna benzer
private TextView textView; 
private SomeObject someObject; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    View scrollView = inflater.inflate(R.layout.fragment_play_game, container, false); 
    textView = (TextView) scrollView.findViewById(R.id.game_data_text); 
    textView.setText(someObject.getTextForTextView()); 

    LinearLayout layout = (LinearLayout) scrollView.findViewById(R.id.game_data_container); 
    for (String optionText : someObject.getTextForButtons()) { 
     layout.addView(createOptionButton(optionText, layout)); 
    } 
    return scrollView; 
} 

private View createOptionButton(String optionText, LinearLayout layout) { 
    Button optionButton = new Button(this.getActivity()); 
    // set button layout/options here, somehow?? 
    optionButton.setText(optionText); 
    return optionButton; 
} 

(O da şu: Burada umarım benim için biraz daha net açıklamalar yapacak yapmaya çalışıyorum şeyin bir yaklaşım var
Ben düğmeleri için) ekleyin çalışıyorum LinearLayout: Ben düğmesi için bir XML düzeni dosyası oluşturmak için olmadığımı (Ayrıca

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/game_data_container" 
     etc... > 

     <TextView 
      android:id="@+id/game_data_text" 
      etc... /> 

    </LinearLayout> 

</ScrollView> 

bu gibi görünmelidir) diyoruz custom_button.xml sağlar ?:

<?xml version="1.0" encoding="utf-8"?> 
    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/play_game_option_button" 
     etc... /> 

Güncelleme: Bu bir

Button optionButton = new Button(this.getActivity()); 

:
Sadece MrFox @ bahsettiğini üzerinde biraz genişletmek için, almak o çalışma yaptıklarını bu satırı değiştirin oldu

Yalnızca bir Düğme düzeni (düğme şablonu) içeren bir xml dosyasını şişiren
Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false); 

. Bu durumda, dosyadaki düğmenin üstünde ebeveyn olmadığından, yalnızca dosyanın bulunduğu dosyanın kök görünümünü döndürür.

Ancak, son boolean değerini (attachToParent) doğru olarak ayarlamış olsaydım, düğmenin içinde bulunduğu kök kabını (bu yalnızca çağrıya geçirilen 'düzen' değişkeni) döndürmüş olurdu. .

Şimdi bu şablonu kullanmak istediğim kadar düğme üretebilirim.

cevap

5

Yalnızca uygulanan XML stilleri olan düğmeyi ve sonra onu doğrusal düzeninize şişiren bir düzen yapmayı düşündünüz mü? gibi

şey:

inflater.inflate (R.layout.StyledButton, MyLinearLayout, true); senin aktivitesinde /res/layout/my_button_layout.xml

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    ... /> 

kodu altında da buton için

+1

teşekkürler cevap için, ben senin düşündüren ne uğraşırken denedim ama ben gerçekten anlamıyorum Önerilerinizi nasıl uygulayacağınız. Orijinal sorumu daha fazla bilgi ile güncelledim. – Rob

+0

siz ve ben hem –

+0

hem de Cevapımı genişletmek için @Rob'a teşekkürler! –

1

xml

myButton = (Button)inflate.inflate(R.layout.my_button_layout, null); 
myView.addView(myButton);