首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >主题/样式所有复选框

主题/样式所有复选框
EN

Stack Overflow用户
提问于 2018-03-01 22:32:22
回答 1查看 3.3K关注 0票数 1

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

我想更改复选框选中的颜色和复选框边框的颜色。

如果我创建这种风格:

代码语言:javascript
运行
复制
<style name="MyCheckBox" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="colorControlNormal">#8AFFFFFF</item>
    <item name="colorControlActivated">@android:color/white</item>
</style>

并将其作为一个主题应用在我的复选框中--它工作得很好。

代码语言:javascript
运行
复制
<CheckBox
  android:id="@+id/status_favorite"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:theme="@style/MyCheckBox"/>

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

我试图在我的主题中设置checkboxStyle,但是这是行不通的。

代码语言:javascript
运行
复制
<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>

是否有方法为所有复选框设置默认主题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-01 23:34:06

不幸的是,colorControlNormalcolorControlActivated是主题属性,而不是样式属性,因此它们只有在视图的主题中定义时才能工作。据我所知,没有办法为某一类型的所有视图设置“默认主题”;像checkboxStyle这样的属性只能为所有复选框设置默认样式。此外,您不能通过编写以下内容来“欺骗”系统:

代码语言:javascript
运行
复制
<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属性设置为要更改的每个复选框(或者设置为持有这些复选框的父视图组)

编辑:潜在的解决办法

取决于您的确切需求,您可能可以通过以下方法来解决问题:

代码语言:javascript
运行
复制
<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使用颜色选择器资源:

代码语言:javascript
运行
复制
<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>
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49059754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档