Mam LinearLayout, który zawiera TextView i zawsze będzie. Zawsze znajdzie się co najmniej jeden przycisk pod tekstem, ale w pewnych okolicznościach może być ich więcej.Tworzenie przycisków Android programowo za pomocą układu XML jako szablonu
Mogę skutecznie tworzyć i dodawać tyle przycisków, ile potrzebuję programowo. Mogę również z powodzeniem programować dowolne parametry/opcje związane z wyglądem dla tych przycisków.
Problem polega na tym, że nie wiem, jak powiedzieć programowo utworzonemu przyciskowi, że powinien on używać pliku zasobów XML, który zawiera parametry wyglądu i układu, zamiast ustawiania tych parametrów programowo.
Przyjrzałem się podobnie nazwanym pytaniom i spędziłem trochę czasu z samym API, bezskutecznie.
Edit:
Oto przybliżeniem co próbuję zrobić, które miejmy nadzieję uczynić wyjaśnień nieco jaśniejsze dla mnie:
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;
}
Mój plik XML szablonu dla fragmentu wygląda następująco (Jest to LinearLayout że Próbuję dodać przyciski do):
<?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>
Ponadto, jeśli jestem, aby utworzyć plik XML układ dla przycisku (pozwala wywołać custom_button.xml) powinien wyglądać tak ?:
<?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... />
Aktualizacja:
Wystarczy poszerzyć trochę na co MrFox @ mówi się o to, co zrobiłem, aby uzyskać jego pracy było zastąpić ten wiersz:
Button optionButton = new Button(this.getActivity());
z tego:
Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false);
... co powoduje zawyżenie pliku xml zawierającego tylko układ przycisków (szablon przycisku). W takim przypadku zwraca główny widok tego pliku, który jest po prostu przyciskiem, ponieważ nad przyciskiem w pliku nie ma elementu nadrzędnego.
Jednakże, jeśli ustawiłem ostatnią wartość logiczną (attachToParent) na wartość true, zwróciłoby to kontener główny, w którym znajduje się przycisk (co jest po prostu zmienną "layout", która została przekazana do wywołania) .
Mogę teraz tworzyć tyle przycisków, ile chcę, korzystając z tego szablonu.
Dzięki za odpowiedzi, próbowałem zabawy z co się sugeruje, ale ja naprawdę nie rozumiem jak wdrożyć to, co sugerujesz. Zaktualizowałem moje oryginalne pytanie z dodatkowymi informacjami. – Rob
Ty i ja –
Dzięki @Rob za rozszerzenie mojej odpowiedzi! –