主题/样式所有复选框

时间:2018-03-01 22:32:23

标签: android android-theme android-styles

我试图了解如何更改我的应用程序中针对特定主题的所有复选框的外观。

我想更改复选框检查颜色和复选框边框颜色。

如果我创建这种风格:

<style name="MyCheckBox" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="colorControlNormal">#8AFFFFFF</item>
    <item name="colorControlActivated">@android:color/white</item>
</style>

将其作为主题应用于我的复选框,效果很好。

<CheckBox
  android:id="@+id/status_favorite"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:theme="@style/MyCheckBox"/>

但是我真的不想将该主题应用于每个复选框,我想为所有复选框设置主题。

我尝试在我的主题中设置checkboxStyle但是这不起作用。

<style name="MyTheme" parent="Theme.AppCompat">
    ...
    <item name="checkboxStyle">@style/MyCheckBoxStyle</item>
    ...
</style>

<style name="MyCheckBoxStyle" parent="Base.Widget.AppCompat.CompoundButton.CheckBox">
    <item name="colorControlNormal">#8AFFFFFF</item>
    <item name="colorControlActivated">@android:color/white</item>
</style>

有没有办法为所有复选框设置默认主题?

1 个答案:

答案 0 :(得分:6)

不幸的是,colorControlNormalcolorControlActivated主题属性,而不是样式属性,所以它们只有在视图中定义时才有效主题。我不知道为某种类型的所有视图设置“默认主题”;像checkboxStyle这样的属性只能为所有复选框设置默认的样式。此外,您不能通过编写类似的东西来“欺骗”系统:

<style name="MyTheme" parent="Theme.AppCompat">
    ...
    <item name="checkboxStyle">@style/MyCheckBoxStyle</item>
    ...
</style>

<style name="MyCheckBoxStyle" parent="Base.Widget.AppCompat.CompoundButton.CheckBox">
    <item name="android:theme">@style/MyCheckboxTheme</item>
</style>

<style name="MyCheckboxTheme">
    <item name="colorControlNormal">#8AFFFFFF</item>
    <item name="colorControlActivated">@android:color/white</item>
</style>

您的选择是:

  • 修改应用主题中的colorControlNormalcolorControlActivated
  • 修改活动主题中的colorControlNormalcolorControlActivated
  • 手动将android:theme属性设置为您要更改的每个复选框(或保存到这些复选框的父视图组)

编辑:潜在的解决方法

根据您的具体要求,您可能会逃避这一点:

<style name="MyTheme" parent="Theme.AppCompat">
    <item name="checkboxStyle">@style/MyCheckboxStyle</item>
</style>

<style name="MyCheckboxStyle" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="buttonTint">#8AFFFFFF</item>
</style>

这将更改应用中每个复选框的颜色,而无需使用主题属性。如果您想要选中/取消选中不同的颜色,您甚至可以为buttonTint使用颜色选择器资源:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/white" android:state_checked="true"/>
    <item android:color="#8AFFFFFF"/>
</selector>