我的自定义复选框(MyCheckbox
从androidx.appcompat.widget.AppCompatCheckBox
开始扩展,但是默认样式不适用于它。
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="android:checkboxStyle">@style/CheckboxTheme</item>
<item name="checkboxStyle">@style/CheckboxTheme</item>
</style>
<style name="CheckboxTheme" parent="@style/Widget.AppCompat.CompoundButton.CheckBox">
<!-- for example try to change background -->
<item name="android:background">@color/colorPrimary</item>
</style>
但未在预览和运行时更改任何内容。
我还迁移了MaterialComponent(从com.google.android.material.checkbox.MaterialCheckBox
扩展)版本:
com.google.android.material:material:1.1.0-beta01
,并使用@style/Widget.MaterialComponents.CompoundButton.CheckBox
作为样式。但没有改变。
注意: 当我提到每个实例的样式时,此问题就解决了:
<com.something.MyCheckBox
android:id="@+id/ch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some thing"
style="@style/CheckboxTheme"
/>
但我想为此类的所有实例设置此样式。 你能帮我吗?
答案 0 :(得分:0)
根据this answer,我尝试使用ContextThemeWrapper
来应用样式:
class MyCheckbox @JvmOverloads constructor(context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0)
: MaterialCheckBox(ContextThemeWrapper(context, R.style.CheckboxTheme), attrs, defStyle)
答案 1 :(得分:0)
材料组件库提供的MaterialCheckBox
使用主题中定义的checkboxStyle
属性。
只需覆盖此属性即可在您的应用中全局定义样式:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<!-- .... -->
<item name="checkboxStyle">@style/MyCheckBox</item>
</style>
如果要自定义颜色,可以使用以下样式的 materialThemeOverlay
属性:
<style name="MyCheckBox" parent="@style/Widget.MaterialComponents.CompoundButton.CheckBox">
<item name="materialThemeOverlay">@style/ThemeOverlay.CheckBox</item>
</style>
具有:
<style name="ThemeOverlay.CheckBox" parent="">
<item name="colorSurface">@color/....</item>
<item name="colorOnSurface">@color/.....</item>
</style>
只是个笔记。
在MaterialCheckBox
代码中以编程方式定义了colorTint选择器。您还可以定义自定义colorTint选择器,并以自定义样式添加buttonTint
属性。
或者,您也可以在布局中使用android:theme
,但不能在全局范围内使用。
<com.google.android.material.checkbox.MaterialCheckBox
...
android:theme="@style/ThemeOverlay.CheckBox"/>