以编程方式应用于Button时样式不完全正常工作

时间:2016-11-20 16:14:52

标签: android android-studio android-fragments

这是我的风格:

<style name="buttonQuestionStyle" parent="@style/Widget.AppCompat.Button.Colored">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textSize">16sp</item>
    <item name="android:padding">25dp</item>
    <item name="android:layout_margin">10dp</item>
    <item name="android:background">@color/questionButton</item>
</style>

这是我的代码:

Button btn = new Button(getActivity());
btn.setText(ojb.getText());
if (Build.VERSION.SDK_INT < 23) {
    btn.setTextAppearance(getActivity(), R.style.buttonQuestionStyle);
} else {
    btn.setTextAppearance(R.style.buttonQuestionStyle);
}

在应用中:

以编程方式按钮显示如下: programmatically button

通过布局它起作用了。看起来像这样: xml layout button

以下是我在XML布局中的代码:

<Button
    android:text="Question"
    style="@style/buttonQuestionStyle" />

所以...我不知道为什么会发生,以及如何解决它。

3 个答案:

答案 0 :(得分:3)

您可以在构造函数中传递ContextThemeWrapper按钮,并为Button(context, attributeset, defStyle)使用3个参数构造函数。

ContextThemeWrapper wrapper = new ContextThemeWrapper(this,R.style.buttonQuestionStyle);
Button btn = new Button(wrapper, null, 0); // note this constructor
btn.setText("some text");

答案 1 :(得分:1)

您无法以编程方式设置视图的样式,但您可能会发现此thread非常有用。

答案 2 :(得分:0)

根据方法setTextAppearance

的JavaDoc,您可以通过编程方式设置按钮样式的一些信息
Sets the text appearance from the specified style resource.
 <p>
 Use a framework-defined {@code TextAppearance} style like
 {@link android.R.style#TextAppearance_Material_Body1    @android:style/TextAppearance.Material.Body1}
 or see {@link android.R.styleable#TextAppearance TextAppearance} for the
 set of attributes that can be used in a custom style.
  @param resId the resource identifier of the style to apply
 @attr ref android.R.styleable#TextView_textAppearance

因此它只处理文本外观而不处理其他样式元素。

如果你想在runtime programmatically申请一些风格,你需要

  1. 分别进行每项更改,例如设置background,您需要调用setBackground,其他情况也是如此。

  2. 使用该特定主题以编程方式对view进行充气。