问题
I followed Android recommendation and set style="?android:attr/buttonBarStyle"
to parent layout and style="?android:attr/buttonBarButtonStyle"
to buttons.
So now my layout is something like this:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
style="?android:attr/buttonBarStyle">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1"
style="?android:attr/buttonBarButtonStyle"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 2"
style="?android:attr/buttonBarButtonStyle"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 3"
style="?android:attr/buttonBarButtonStyle"/>
</LinearLayout>
But after setting the style, these buttons have become invisible, although I can still click on them.
Please tell me what is wrong.
Edit: Additional details
Well, I've just created a new project specifically to test this layout and surprisingly it indeed does work.
So to be more precise, actually, I dynamically add this layout to another one, something like this:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/buttons_panel_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
<!-- some other stuff -->
</LinearLayout>
Code:
LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout buttonsPanelContainer = (LinearLayout) findViewById(R.id.buttons_panel_container);
View buttonPanelView = null;
if(chosenValueType.equals("some_type")) {
buttonPanelView = layoutInflater.inflate(R.layout.some_buttons_panel, null);
Button Button1 = (Button) buttonPanelView.findViewById(R.id.button1);
Button1.setOnClickListener(this);
Button Button2 = (Button) buttonPanelView.findViewById(R.id.button2);
Button2.setOnClickListener(this);
} else if (chosenRawValueType.equals("another_type") {
//...
ViewGroup insertPoint = (ViewGroup) buttonsPanelContainer;
insertPoint.addView(buttonPanelView, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Sorry to not mention it earlier, I didn't think it could be the case.
So what's wrong?
回答1:
I just needed to use
LayoutInflater layoutInflater = LayoutInflater.from(this);
instead of
LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
回答2:
The provided example works for me as well. Searching for this style attribute I found this example: https://developer.android.com/samples/BorderlessButtons/res/layout/sample_main.html Here you can read to apply the style to every button, which you did in the example you gave. So my implication is that something is covering your buttons or the text on the button is set to white (or the background color of your app).
来源:https://stackoverflow.com/questions/32603533/setting-style-androidattr-buttonbarstyle-to-parent-layout-and-style-androi