Android Material主题六种颜色作用范围及局部样式覆盖问题咨询
问题1解答
你可以通过两个本地渠道获取完整的属性关联信息:
- 直接在Android Studio中查看父主题源码:按住Ctrl(Mac按住Command)点击代码中
Theme.MaterialComponents.DayNight.DarkActionBar的父主题名称,即可跳转到该主题的源码定义文件,里面会列出所有颜色属性的赋值逻辑、关联的组件样式、默认应用场景,所有生效规则都可以直接在源码中查到。 - 你也可以参考Android官方开发者文档中的Material Components颜色系统章节,其中明确标注了六个基础颜色的默认应用场景:
colorPrimary:默认应用于AppBar、ActionBar背景,普通可交互按钮的背景色等核心品牌展示区域colorPrimaryVariant:默认应用于状态栏、系统导航栏等primary颜色的变体展示区域colorOnPrimary:默认应用于所有绘制在colorPrimary背景之上的文字、图标等内容的颜色colorSecondary:默认应用于Switch、复选框、单选框、悬浮按钮、输入框焦点态等次要强调区域colorSecondaryVariant:默认应用于secondary颜色的更深/更浅变体展示场景colorOnSecondary:默认应用于所有绘制在colorSecondary背景之上的文字、图标等内容的颜色
问题2解答
不需要删除父主题,按以下步骤操作即可实现需求,同时适配暗黑模式:
- 首先定义自定义颜色:在
res/values/colors.xml中添加你的自定义颜色:
<color name="myColor">#你要的色值</color>
如果暗黑模式下该颜色需要变化,就在res/values-night/colors.xml中添加同名的myColor配置暗黑模式下的色值;如果暗黑模式下也用同一个颜色,不需要在night目录下重复定义。
2. 针对单个特定Switch,直接在布局文件中给对应Switch控件添加属性即可,该配置优先级高于主题默认样式,会直接生效:
如果使用的是原生Android Switch控件,添加:
<Switch ... android:thumbTint="@color/myColor" />
如果使用的是Material Components库的SwitchMaterial控件,添加:
<com.google.android.material.switchmaterial.SwitchMaterial ... app:thumbTint="@color/myColor" />
如果需要区分开关选中、未选中状态的颜色,可以在res/color目录下创建颜色状态选择器,比如switch_thumb_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/myColor" android:state_checked="true"/> <item android:color="@color/你要的未选中颜色" android:state_checked="false"/> </selector>
然后将thumbTint属性的值改为@color/switch_thumb_selector即可。
如果需要给某个Activity下所有Switch都应用该配置,可以自定义样式继承官方Switch样式,再在该Activity的主题中覆写对应属性:
- 首先在styles.xml中添加自定义样式:
<style name="CustomSwitchStyle" parent="Widget.MaterialComponents.CompoundButton.Switch"> <item name="thumbTint">@color/myColor</item> </style>
- 然后在该Activity对应的主题配置中添加:
<item name="switchStyle">@style/CustomSwitchStyle</item>
以上所有配置都会自动适配暗黑模式,因为颜色资源会自动加载对应配置目录下的取值。
内容的提问来源于stack exchange,提问作者Red Knight
相关产品推荐
相关产品推荐

