使用XML布局作为模板以编程方式创建android按钮
我有一个LinearLayout,它包含一个TextView,而且永远都会。在TextView下面也总是至少有一个按钮,但在某些情况下可能不止一个 我可以通过编程成功地创建和添加所需数量的按钮。我还可以通过编程方式成功设置这些按钮所需的任何与外观相关的参数/选项 问题是,我不知道如何告诉以编程方式创建的按钮它应该使用包含外观和布局参数的XML资源文件,而不是以编程方式设置这些参数 我看了一些命名类似的问题,花了很多时间来搞乱API本身,但都没有用 编辑:使用XML布局作为模板以编程方式创建android按钮,android,android-layout,android-xml,android-button,Android,Android Layout,Android Xml,Android Button,我有一个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布局文件如下所示(我正试图向其中添加按钮):
关于这一点:
Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false);
…这将使仅包含按钮布局(按钮模板)的xml文件膨胀。在本例中,它返回该文件的根视图,它只是按钮,因为文件中按钮上方没有父级
但是,如果我已经将最后一个布尔值(attachToParent)设置为true,它将返回按钮所在的根容器(这只是传递到调用中的“layout”变量)
现在,我可以使用此模板生成任意数量的按钮。您是否想过制作一个布局,该布局只是带有应用的XML样式的按钮,然后将其膨胀到线性布局中 比如:
充气器。充气(R.layout.StyledButton,MyLinearLayout,true) xml,用于
/res/layout/my\u button\u layout.xml
<Button xmlns:android="http://schemas.android.com/apk/res/android"
... />
谢谢你的回复,我试着玩弄你的建议,但我真的不明白如何实施你的建议。我已经用更多信息更新了我的原始问题。感谢@Rob对我的答案进行了扩展!这非常好,因为我需要设置一组不同的属性,这些属性在xml文件中定义起来比在编程中更容易。
Button optionButton = new Button(this.getActivity());
Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false);
<Button xmlns:android="http://schemas.android.com/apk/res/android"
... />
myButton = (Button)inflate.inflate(R.layout.my_button_layout, null);
myView.addView(myButton);