具有ContextThemeWrapper的Android样式按钮

时间:2018-10-20 20:10:45

标签: android kotlin styles

我正在尝试在运行时使用Button元素填充表,并尝试将styles.xml中定义的样式应用于此。

<style name="BlueButtonStyle">
    <item name="android:textSize">20sp</item>
    <item name="android:padding">15dp</item>
    <item name="android:layout_margin">5dp</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_weight">1</item>
    <item name="android:background">@drawable/gradient_button</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textAllCaps">false</item>
</style>

我已经在一些能够定义style="@style/BlueButtonStyle"的静态按钮上使用了这种样式,因此我知道样式本身可以工作。看起来像这样:

enter image description here

按钮在这样的循环中生成:

val contextWrapper = ContextThemeWrapper(context, R.style.BlueButtonStyle)
val btn = Button(contextWrapper).apply { text = "Unknown" }

但是,结果看起来并不像预期的那样:

enter image description here

已应用#FFFFFF的字体颜色,但没有其他设置。它也没有没有样式的按钮具有相同的灰色背景。

如何正确设置以编程方式生成的Button的样式?我希望避免不得不给xml充气。解决方案应向后兼容最低android 6.0。

1 个答案:

答案 0 :(得分:0)

我不了解kotlin,但是在Java中,您可以这样做:

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