简体   繁体   中英

Android - How to programmatically set the button style in a Linearlayout?

I am programmatically creating a LinearLayout for an AlertDialog with some buttons.

I WANT to do this:

<LinearLayout android:id="@+id/footer" android:layout_width="fill_parent"
style="@android:style/ButtonBar">

But with code like this:

LinearLayout buttons = new LinearLayout(parentContext);
buttons.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams buttonsParams =
    new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
    LayoutParams.WRAP_CONTENT);
topLayout.addView(buttons, buttonsParams);
buttons.setLayoutParams(buttonsParams);
Button btnAdd = new Button(context);
btnAdd.setText("Add");

How can I set the style of the buttons (use a button bar) programmitically?

Hope I'm not too late to join the party :)

Well, Styles can be applied to a View at initialization phase. For example:

LinearLayout button = new LinearLayout(context, null, android.R.style.ButtonBar);

This worked for me:

int buttonStyle = R.style.your_button_style;
Button button = new Button(new ContextThemeWrapper(context, buttonStyle), null, buttonStyle)

This is the only answer that actually delivered what I was looking for: http://belencruz.com/2013/04/set-styles-programmatically-in-android/

Essentially, create a layout XML file that simply has a <Button/> element with the style you want. Then, inflate it programmatically and just customize the button text.

Something along the lines of:

<?xml version="1.0" encoding="utf-8"?>
<Button style="@style/your_custom_style_here"/>

In code:

Button button = (Button)getLayoutInflater().inflate(R.layout.your_custom_button_layout_file, null);
button.setText("Your Text");

The Paris library from AirBnB is perfect for this, allowing for programmatic configuration like so:

Paris.styleBuilder(textView)
        .add(R.style.MyGreenTextView)
        .textSizeRes(R.dimen.my_text_size_small)
        .apply();

Instead of waqaslams

LinearLayout button = new LinearLayout(context, null, android.R.style.ButtonBar);

(which is, judging by the comments, API dependable) I have also read ridoys answer from here [ Android Button Styling Programatically ] which is

transferBtn.setBackgroundResource(R.layout.buttonstyle);

(exposing the above answers because one of these may also work for you, depending of API version you use),

But this is what worked for me (mind the change from "layout" to "drawable") :

Button b = new Button(this);
b.setBackgroundResource(R.drawable.button_custom_green);

(answer from [ How to programmatically setting style attribute in a view )

In my case style was not loaded at all when I pass them into Button constructor. It seems that was because I was using the material design view. Here what solved my case:

val themeWrapper = ContextThemeWrapper(
      context,
      R.style.AppTheme_ButtonPrimary // my button style
)

val button = MaterialButton(themeWrapper)

Please note that MaterialButton was created instead of Button .

I found this solution at: How to specify a style for a view programmatically in Android .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM