Theme/Style 所有复选框
Theme/Style all checkboxes
我想了解如何针对特定主题更改应用程序中所有复选框的外观。
我想更改复选框勾选颜色和复选框边框颜色。
如果我创建这个样式:
<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>
有没有办法为所有复选框设置默认主题?
不幸的是,colorControlNormal
和 colorControlActivated
是 主题属性 ,而不是 样式属性 ,所以它们只能工作如果它们在视图的主题中定义。据我所知,无法为某种类型的所有视图设置 "default theme"; checkboxStyle
之类的属性只能为所有复选框设置默认的 样式 。此外,您不能通过编写如下内容来 "trick" 系统:
<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>
您的选择是:
- 修改应用主题中的
colorControlNormal
和 colorControlActivated
- 修改 activity 的主题中的
colorControlNormal
和 colorControlActivated
- 手动将
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>
这将更改应用中每个复选框的颜色,而无需使用主题属性。如果您想要 checked/unchecked:
的不同颜色,您甚至可以为 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>
我想了解如何针对特定主题更改应用程序中所有复选框的外观。
我想更改复选框勾选颜色和复选框边框颜色。
如果我创建这个样式:
<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>
有没有办法为所有复选框设置默认主题?
不幸的是,colorControlNormal
和 colorControlActivated
是 主题属性 ,而不是 样式属性 ,所以它们只能工作如果它们在视图的主题中定义。据我所知,无法为某种类型的所有视图设置 "default theme"; checkboxStyle
之类的属性只能为所有复选框设置默认的 样式 。此外,您不能通过编写如下内容来 "trick" 系统:
<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>
您的选择是:
- 修改应用主题中的
colorControlNormal
和colorControlActivated
- 修改 activity 的主题中的
colorControlNormal
和colorControlActivated
- 手动将
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>
这将更改应用中每个复选框的颜色,而无需使用主题属性。如果您想要 checked/unchecked:
的不同颜色,您甚至可以为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>