这是我的风格:
<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);
}
在应用中:
以编程方式按钮显示如下:
通过布局它起作用了。看起来像这样:
以下是我在XML布局中的代码:
<Button
android:text="Question"
style="@style/buttonQuestionStyle" />
所以...我不知道为什么会发生,以及如何解决它。
答案 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
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
申请一些风格,你需要
分别进行每项更改,例如设置background
,您需要调用setBackground
,其他情况也是如此。
或
使用该特定主题以编程方式对view
进行充气。