You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:57:03