У меня есть LinearLayout, который содержит TextView, и всегда будет. Также всегда будет по крайней мере одна кнопка, расположенная под TextView, но при определенных обстоятельствах их может быть больше одной.
Я могу успешно создать и добавить столько кнопок, сколько мне нужно программно. Я также могу программно установить любые параметры/параметры, связанные с внешним видом, которые мне нужны для этих кнопок.
Проблема в том, что я не знаю, как сообщить программно созданной кнопке, что она должна использовать файл ресурсов XML, который содержит параметры внешнего вида и макета, вместо того, чтобы задавать эти параметры программно.
Я просмотрел вопросы с похожими названиями и потратил время на сам API, но безрезультатно.
Изменить:
Вот пример того, что я пытаюсь сделать, что, надеюсь, сделает пояснения для меня более понятными:
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;
}
Мой файл макета XML для фрагмента выглядит так (это LinearLayout, к которому я пытаюсь добавить кнопки):
<?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>
Кроме того, если мне нужно создать XML-файл макета для кнопки (давайте назовем его custom_button.xml), он должен выглядеть примерно так?:
<?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... />
Обновление:
Просто чтобы немного расширить то, о чем говорит MrFox@, я сделал, чтобы заставить его работать, заменив эту строку:
Button optionButton = new Button(this.getActivity());
с этим:
Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false);
... который раздувает XML-файл, содержащий только макет кнопки (шаблон кнопки). В этом случае он возвращает корневой вид этого файла, который является просто кнопкой, потому что над кнопкой в файле нет родителя.
Однако, если бы я установил для последнего логического значения (attachToParent) значение true, он бы вернул корневой контейнер, в котором будет находиться кнопка (это всего лишь переменная макета, которая была передана в вызов).
Теперь я могу создать столько кнопок, сколько захочу, используя этот шаблон.