Jetpack Compose配置主题时报Conflicting 'on' color错误如何解决
问题产生原因
- Jetpack Compose Material 主题内置了可访问性校验规则,会自动检查所有容器色与其对应前景(
on)色的对比度是否符合Material设计规范,对比度不达标就会抛出该错误。 - 你的代码里
primaryVariant赋值为CustomColors.Custom2(色值0xAA892335),而primary色系的统一前景色为onPrimary = Color.White,经计算Custom2与白色的对比度未达到规范要求的最小阈值。 - 新增
secondary = CustomColors.Custom2配置后触发了全量的主题颜色合法性校验,因此暴露了之前未触发的对比度冲突问题。同时你未显式指定onSecondary参数,lightColors默认使用黑色作为onSecondary,Custom2与黑色的对比度同样不满足要求,也会触发该报错。
解决方法
- 方案1:显式指定所有
on系列颜色,避免依赖默认值
补充lightColors配置中缺失的onSecondary等参数,为Custom2搭配对比度达标的前景色,示例代码如下:val colors = lightColors( primary = CustomColors.Custom1, primaryVariant = CustomColors.Custom2, onPrimary = Color.White, background = Color.White, onBackground = Color.Black, secondary = CustomColors.Custom2, onSecondary = Color.White // 为Custom2指定白色作为前景,满足对比度要求 ) - 方案2:调整色值保证对比度
修改CustomColors.Custom2的色值,遵循深色容器配浅前景、浅色容器配深前景的原则,让它和对应的onPrimary、onSecondary颜色的对比度都达到规范要求即可。 - 方案3:临时压制校验(仅建议调试阶段使用)
给lightColors函数添加@Suppress("MaterialDesignConflictingOnColor")注解,即可临时关闭该可访问性校验,避免报错。
内容的提问来源于stack exchange,提问作者RaceyT
相关产品推荐
相关产品推荐

