Android - 如何以编程方式在Linearlayout中设置按钮样式?

时间:2012-07-10 21:24:46

标签: android android-layout

我正在以编程方式为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");

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

6 个答案:

答案 0 :(得分:47)

希望我加入聚会还为时不晚:)

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

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

答案 1 :(得分:31)

这对我有用:

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

答案 2 :(得分:12)

这是实际提供我所寻找的唯一答案: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");

答案 3 :(得分:5)

而不是waqaslams

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

(也就是说,根据评论判断,API可靠)我也从这里读过ridoys的答案 <Android Button Styling Programatically]是

transferBtn.setBackgroundResource(R.layout.buttonstyle);

(揭露上述答案,因为其中一个也适用于您,具体取决于您使用的API版本),

但这对我有用(请注意从&#34;布局&#34;到&#34; drawable&#34;)

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

(来自[How to programmatically setting style attribute in a view

的回答

答案 4 :(得分:2)

AirBnB的Paris库非常适合此操作,可以进行如下编程配置:

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

答案 5 :(得分:0)

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

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

val button = MaterialButton(themeWrapper)

请注意,创建的是MaterialButton,而不是Button

我在How to specify a style for a view programmatically in Android找到了这个解决方案。