Jetpack Compose Icon颜色在Mi 9T Pro真机与模拟器显示相反问题
Mi 9T Pro 真机 Icon 显示异常修复方案
问题现象
- 深色模式下真机 Icon 显示为黑色,浅色模式下显示为白色,与模拟器表现完全相反
- 手动指定 Icon 颜色为纯黑/纯白时无效,只有设置非纯黑纯白的其他颜色可以正常生效
- 真机效果:

- 模拟器效果:

- 相关实现代码:
BottomNavigationItem( icon = { Icon( painter = painterResource( id = screen.icon ), contentDescription = screen.title, ) }, selectedContentColor = Color.White, unselectedContentColor = Color.White.copy(alpha = .3f) ... )
根因说明
该问题是小米 MIUI 系统的强制暗黑适配逻辑导致的:MIUI 会对未明确声明关闭强制暗黑的 App 自动做颜色反色处理,针对100%不透明度的纯黑、纯白色,会直接根据系统深浅模式反转显示,其他颜色不会触发该逻辑,原生 Android 模拟器无 MIUI 定制层所以表现正常。
解决方案
任选以下任意一种方案即可修复:
- 方案1:调整着色值绕开反色逻辑
给Icon组件显式指定tint时,给纯白/纯黑加极微小的透明度即可,视觉上和原颜色无差异,不会触发 MIUI 的反色判断:Icon( painter = painterResource(id = screen.icon), contentDescription = screen.title, tint = Color.White.copy(alpha = 0.99f) ) - 方案2:全局关闭强制暗黑适配
在项目AndroidManifest.xml的application节点添加android:forceDarkAllowed="false"属性,彻底禁用系统的强制反色逻辑,该属性为 Android 10 及以上官方原生属性,无兼容性问题:<application android:name=".你的Application类名" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:forceDarkAllowed="false" ...其余配置> ...Activity 配置 </application> - 方案3:绑定主题语义化颜色
将图标着色绑定到 Material 主题的语义化颜色属性,比如tint = MaterialTheme.colors.onSurface,系统会根据当前主题自动匹配对应颜色,也不会触发 MIUI 的强制反色。
内容的提问来源于stack exchange,提问作者Guy
相关产品推荐
相关产品推荐

