49

我正在以编程方式为带有一些按钮的 AlertDialog 创建一个 LinearLayout。

这样做:

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

但是使用这样的代码:

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");

如何以编程方式设置按钮的样式(使用按钮栏)?

4

6 回答 6

53

希望我加入派对还不算太晚:)

好吧,样式可以应用于View初始化阶段。例如:

LinearLayout button = new LinearLayout(context, null, android.R.style.ButtonBar);
于 2012-09-21T15:48:55.173 回答
44

这对我有用:

int buttonStyle = R.style.your_button_style;
Button button = new Button(new ContextThemeWrapper(context, buttonStyle), null, buttonStyle)
于 2014-06-26T19:24:29.357 回答
14

这是唯一真正提供了我正在寻找的答案:http: //belencruz.com/2013/04/set-styles-programmatically-in-android/

本质上,创建一个布局 XML 文件,其中仅包含具有<Button/>您想要的样式的元素。然后,以编程方式对其进行充气并自定义按钮文本。

类似于以下内容:

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

在代码中:

Button button = (Button)getLayoutInflater().inflate(R.layout.your_custom_button_layout_file, null);
button.setText("Your Text");
于 2016-12-14T09:36:22.283 回答
10

AirBnB的Paris库非常适合这一点,允许像这样进行编程配置:

Paris.styleBuilder(textView)
        .add(R.style.MyGreenTextView)
        .textSizeRes(R.dimen.my_text_size_small)
        .apply();
于 2018-08-31T04:12:09.990 回答
5

而不是 waqaslams

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

(也就是说,从评论来看,API 是可靠的)我也从这里 [ Android Button Styling Programatically ] 阅读了 ridoys 的答案,这是

transferBtn.setBackgroundResource(R.layout.buttonstyle);

(公开上述答案,因为其中之一也可能对您有用,具体取决于您使用的 API 版本),

但这对我有用(注意从“布局”到“可绘制”的变化)

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

(来自[如何以编程方式在视图中设置样式属性的答案)

于 2014-05-13T17:16:16.833 回答
1

Button在我的情况下,当我将它们传递给构造函数时,根本没有加载样式。这似乎是因为我使用的是材料设计视图。这里解决了我的问题:

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

val button = MaterialButton(themeWrapper)

请注意,它MaterialButton是创建而不是Button.

我在以下位置找到了这个解决方案:如何在 Android 中以编程方式指定视图的样式

于 2020-05-21T07:22:12.480 回答