7

我有一个包含 TextView 的 LinearLayout,并且总是如此。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,它将返回按钮所在的根容器(这只是传递给调用的“布局”变量)。

我现在可以使用此模板生成任意数量的按钮。

4

2 回答 2

5

您是否想过制作一个仅包含应用 XML 样式的按钮的布局,然后将其膨胀到您的线性布局中?

就像是:

inflater.inflate(R.layout.StyledButton, MyLinearLayout, true);

于 2012-09-14T17:42:38.930 回答
1

xml 为您的按钮下/res/layout/my_button_layout.xml

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

活动中的代码

myButton = (Button)inflate.inflate(R.layout.my_button_layout, null);
myView.addView(myButton);
于 2016-03-19T19:32:37.637 回答