使用Theme.MaterialComponents.Light.DarkActionBar时部分属性失效如何解决?
核心原因
你当前使用的Theme.MaterialComponents.Light.DarkActionBar属于Material原生主题,默认优先遵循Material Design专属属性规范,传统AppCompat体系下的colorButtonNormal、colorSwitchThumbNormal、colorBackgroundFloating属性会被覆盖,因此不会生效。你可以选择以下两种方案解决:
方案1:使用官方兼容主题(最快适配现有配置)
直接将父主题替换为带Bridge后缀的兼容版本,不需要修改原有属性配置即可直接生效:
<style name="Theme.Test" parent="Theme.MaterialComponents.Light.DarkActionBar.Bridge"> <!-- 原有属性配置保持不变 --> <item name="colorControlNormal">#EF5350</item> <item name="colorControlActivated">#AB47BC</item> <item name="colorControlHighlight">#42A5F5</item> <item name="colorButtonNormal">#66BB6A</item> <item name="colorSwitchThumbNormal">#FFCA28</item> <item name="colorBackgroundFloating">#5C1212</item> </style>
Bridge主题是MaterialComponents官方为从AppCompat迁移的项目提供的兼容主题,既保留原有AppCompat属性的生效逻辑,也支持使用MaterialComponents的新特性。
方案2:使用Material原生属性规范(推荐,符合官方设计标准)
如果不需要兼容旧版AppCompat逻辑,可以将原有属性替换为Material体系对应的属性,配置如下:
<style name="Theme.Test" parent="Theme.MaterialComponents.Light.DarkActionBar"> <!-- 这三个属性原生兼容,保持不变 --> <item name="colorControlNormal">#EF5350</item> <item name="colorControlActivated">#AB47BC</item> <item name="colorControlHighlight">#42A5F5</item> <!-- 关联自定义按钮、开关默认样式 --> <item name="materialButtonStyle">@style/Widget.Test.Button</item> <item name="switchStyle">@style/Widget.Test.Switch</item> <!-- 替换colorBackgroundFloating,配置浮动组件背景色 --> <item name="colorSurface">#5C1212</item> </style> <!-- 自定义按钮默认样式,替换原colorButtonNormal配置 --> <style name="Widget.Test.Button" parent="Widget.MaterialComponents.Button"> <item name="backgroundTint">#66BB6A</item> </style> <!-- 自定义开关默认样式,替换原colorSwitchThumbNormal配置 --> <style name="Widget.Test.Switch" parent="Widget.MaterialComponents.CompoundButton.Switch"> <item name="thumbTint">@color/switch_thumb_selector</item> </style>
新建res/color/switch_thumb_selector.xml作为开关滑块的颜色选择器:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="?attr/colorControlActivated"/> <item android:state_enabled="false" android:color="@color/mtrl_switch_thumb_disabled"/> <!-- 对应原colorSwitchThumbNormal的默认状态颜色 --> <item android:color="#FFCA28"/> </selector>
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

