Android 7.1.1及以上系统通知小图标显示白方块问题求助
我之前踩过一模一样的坑!你已经做好了透明背景和遵循设计规范,但还是出现白方块,大概率是这几个容易被忽略的细节出了问题,给你逐一排查:
图标颜色必须是纯单色(仅白色):Android 7.1+对通知小图标要求非常严格,只能是纯白色+透明背景,哪怕是浅灰色或者带渐变的白色都不行。最快的解决办法是用Android Studio自带的「Image Asset Studio」重新生成图标:右键res目录 → New → Image Asset → 选择「Notification Icons」类型,导入你的图标素材,它会自动帮你处理成符合系统要求的单色透明图标,生成后直接用这个新图标替换原来的
R.drawable.notification_icon就行。检查资源目录与兼容性:确保图标放在正确的
drawable-xxxdpi目录下,不要放在mipmap目录(虽然能显示,但部分系统版本会有兼容性问题)。另外,要保证所有分辨率目录下的图标都是符合规范的单色版本,别在高分辨率目录里混了带颜色的旧图标。排查主题/样式的覆盖问题:有时候应用主题里的
android:notificationIcon属性会覆盖你代码中设置的图标。你可以检查AndroidManifest.xml里的应用主题,或者在styles.xml中确认有没有设置这个属性,如果有的话,要么删除它,要么把它改成你符合规范的图标ID。定制ROM的特殊适配:小米、华为这类定制ROM经常会对通知图标做特殊处理。比如小米需要在应用的「通知管理」里开启「显示图标」权限,华为则可能需要在后台权限设置中允许应用显示通知图标。你可以换一台原生Android设备测试,如果原生系统正常,那就是定制ROM的适配问题,针对性调整设置即可。
附调整后的代码示例(用Image Asset生成的规范图标):
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); Notification notification = mBuilder .setSmallIcon(R.drawable.ic_notification) // 替换为生成的规范通知图标 .setTicker("testing") .setWhen(0) .setAutoCancel(true) .setContentTitle(title) .setContentIntent(contentIntent) .setSound(defaultSoundUri) .setContentText(message) .build(); notification.flags = Notification.FLAG_AUTO_CANCEL; notificationManager.notify(NOTIFICATION_ID, notification);
内容的提问来源于stack exchange,提问作者rafeek




