如何修改安卓系统通知托盘中的通知图标颜色
Android 5.0(API 21)及以上系统对通知小图标有强制规范,你配置的com.google.firebase.messaging.default_notification_color不会直接修改图标本身的填充色,需要按以下步骤排查修改:
- 第一步:检查通知图标规范
你使用的ic_stat_e_ai_notif_icon必须是仅包含白色像素和透明区域的单色资源,不能自带其他颜色。如果是矢量图,要确保所有图形的fillColor设为白色,不要额外添加tint属性;如果是位图,所有非透明区域必须为纯白色,系统只会保留图标的轮廓信息,再用指定颜色对轮廓进行着色。 - 第二步:区分Firebase通知类型适配
- 如果发送的是Firebase notification类型消息,应用在后台时会自动读取manifest里的配置生效,你当前的meta-data配置是正确的,可检查
@color/colorPrimary是否在colors.xml中正确定义,没有被夜间模式、多语言等其他资源配置覆盖。 - 如果发送的是Firebase data类型消息,或是应用在前台时接收通知,需要你在
FirebaseMessagingService的onMessageReceived回调中手动构建通知,此时manifest中的默认颜色配置不会自动生效,必须调用setColor方法手动指定颜色,示例代码如下:
- 如果发送的是Firebase notification类型消息,应用在后台时会自动读取manifest里的配置生效,你当前的meta-data配置是正确的,可检查
// Java 示例 NotificationCompat.Builder builder = new NotificationCompat.Builder(context, YOUR_NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.drawable.ic_stat_e_ai_notif_icon) // 手动设置通知图标着色颜色,和manifest配置的colorPrimary保持一致即可 .setColor(ContextCompat.getColor(context, R.color.colorPrimary)) .setContentTitle("通知标题") .setContentText("通知内容") .setPriority(NotificationCompat.PRIORITY_DEFAULT);
// Kotlin 示例 val builder = NotificationCompat.Builder(context, YOUR_NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.drawable.ic_stat_e_ai_notif_icon) .setColor(ContextCompat.getColor(context, R.color.colorPrimary)) .setContentTitle("通知标题") .setContentText("通知内容") .setPriority(NotificationCompat.PRIORITY_DEFAULT)
- 第三步:缓存清理
如果修改后仍然不生效,可卸载应用重新安装测试,避免本地旧的通知缓存导致新配置不生效。 - 额外说明:Android 5.0及以上不允许通知小图标使用彩色样式,如果你需要展示彩色图标,可调用
setLargeIcon方法设置通知大图标,大图标可自定义为任意彩色图片,不受规范限制。
内容的提问来源于stack exchange,提问作者Ricardo Oscar Kanitz
相关产品推荐
相关产品推荐

