Create android buttons programmatically using XML layout as template

夙愿已清 提交于 2019-12-10 03:52:34

问题


I have a LinearLayout that contains a TextView, and always will. There will also always be at least one button located below the TextView, but there might be more than one under certain circumstances.

I can successfully create and add as many buttons as I need programmatically. I can also successfully set whatever appearance related parameters/options that I require for these buttons programmatically.

The problem is that I don't know how to tell a programmatically created button that it should use a XML resource file, which contains the appearance and layout parameters, instead of setting these parameters programmatically.

I've looked at similarly named questions and spent time messing with the API itself, to no avail.

Edit:
Here's an approximation of what I'm trying to do that will hopefully make explanations a bit clearer for me:

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;
}

My XML layout file for the fragment looks like this (It's this LinearLayout that I'm trying to add buttons to):

<?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>

Also, if I'm to create an XML layout file for the button (lets call it custom_button.xml) should it look something like this?:

<?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... />

Update:
Just to expand a bit on what MrFox@ is talking about, what I did to get it working was replace this line:

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

with this one:

Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false);

...which inflates an xml file containing only a Button layout (the button template). In this case, it returns the root view of that file, which is just the button because there's no parent above the button in the file.

However, if I had have set the last boolean value (attachToParent) to true, it would have returned the root container that the button will be in (which is just the 'layout' variable that was passed into the call).

I can now produce as many buttons as I want using this template.


回答1:


Have you thought of making a layout that is just the button with the applied XML styles and then inflating it into your linear layout?

something like:

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




回答2:


xml for your button under /res/layout/my_button_layout.xml

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

code in your activity

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


来源:https://stackoverflow.com/questions/12429255/create-android-buttons-programmatically-using-xml-layout-as-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!