You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android 7.1.1及以上系统通知小图标显示白方块问题求助

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

火山引擎 最新活动