MIUI设备Android通知样式下图标显灰方块,如何实现Gmail同款适配?
解决MIUI通知图标适配问题
问题原因
MIUI的「Android通知样式」严格遵循原生Android的通知图标规范:仅支持单色(白色)、透明背景的图标,彩色图标会被系统强制转为灰色方块;而「MIUI通知样式」允许显示彩色应用图标。Gmail通过适配两套图标实现了两种样式下的正常显示。
解决方案
需要制作符合规范的单色通知图标,并在代码中根据MIUI的通知样式切换图标:
制作单色通知图标
- 图标要求:仅白色图形,透明背景,尺寸符合各dpi标准(如mdpi 24×24、hdpi 36×36、xxhdpi 72×72等)
- 将图标放入
res/drawable-xxxhdpi等对应分辨率目录,命名例如ic_notification_white
代码中适配切换
先实现判断MIUI当前通知样式的方法,再根据样式选择对应图标:
// 判断是否为MIUI的Android通知样式 private fun isMIUIAndroidNotificationStyle(context: Context): Boolean { return try { val isXiaomi = Build.MANUFACTURER.equals("Xiaomi", ignoreCase = true) if (isXiaomi) { val style = Settings.Global.getInt(context.contentResolver, "notification_style", 0) style == 1 // 1代表Android样式,0代表MIUI样式 } else { false } } catch (e: Exception) { // 读取失败时,按原生Android O+的规范处理 Build.VERSION.SDK_INT >= Build.VERSION_CODES.O } } // 设置通知图标 val icon = if (isMIUIAndroidNotificationStyle(context)) { R.drawable.ic_notification_white // 单色通知图标 } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { R.mipmap.ic_launcher } else { R.drawable.ic_app_icon } } notificationBuilder.setSmallIcon(icon)
补充说明
- 必须制作单色图标,这是实现适配的核心——Gmail也是通过提供「彩色应用图标+单色通知图标」两套资源来完成适配的
- 若无需精准区分MIUI样式,也可直接对Android O及以上版本统一使用单色图标,原生系统及MIUI的Android样式都会正常显示,MIUI样式下系统会自动兼容彩色图标显示
内容的提问来源于stack exchange,提问作者dev_nil
相关产品推荐
相关产品推荐

