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

Flutter本地通知Android端图标透明 如何配置显示原始图标

问题描述

使用PNG文件制作本地通知图标时,iOS端显示完全正常,Android端图标呈现透明状态,两端效果如下:

  • iOS端通知图标效果
    iOS端通知图标正常显示效果
  • Android端通知图标异常效果
    Android端通知图标透明异常效果

当前通知功能实现代码:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
// import 'package:timezone/data/latest_all.dart' as tz;
// import 'package:timezone/timezone.dart' as tz;

final notifications = FlutterLocalNotificationsPlugin();

initNotification() async {

  var androidSetting = const AndroidInitializationSettings('ic_launcher');

  var iosSetting = const IOSInitializationSettings(
    requestAlertPermission: true,
    requestBadgePermission: true,
    requestSoundPermission: true,
  );

  var initializationSettings = InitializationSettings(
      android: androidSetting,
      iOS: iosSetting
  );
  await notifications.initialize(
    initializationSettings,
  );
}

showNotification() async {

  var androidDetails = const AndroidNotificationDetails(
    'ID',
    'notification',
    priority: Priority.high,
    importance: Importance.max,
    // color: Color.fromARGB(255, 255, 0, 0),
  );

  var iosDetails = const IOSNotificationDetails(
    presentAlert: true,
    presentBadge: true,
    presentSound: true,
  );

  notifications.show(
      1,
      'title1',
      'content1',
      NotificationDetails(android: androidDetails, iOS: iosDetails)
  );
}
问题原因

Android 5.0(API 级别 21)及以上系统对通知小图标有强制规范:必须使用透明背景+白色单色剪影的素材,系统会自动对图标非透明区域叠加单色蒙版渲染。你当前直接复用彩色、非透明背景的应用启动图标ic_launcher作为通知图标,系统会将不符合规范的彩色区域识别为透明层,最终出现图标全透的显示异常。iOS无该强制限制,因此同一份彩色PNG可正常显示。

解决步骤

1. 生成符合规范的Android通知图标

不要直接复用应用启动图标,单独制作通知素材,最稳妥的方式是用Android Studio自带工具自动生成全分辨率适配的标准图标:

  • 打开项目的Android模块,右键点击android/app/src/main/res目录
  • 依次选择New → Image Asset
  • Icon Type选择Notification Icons
  • 导入你的图标源文件,调整图形尺寸,确保背景完全透明、图形内容为纯白色
  • 点击完成,工具会自动将不同分辨率的图标存入对应res目录,默认生成的图标资源名为ic_notification

2. 修改代码配置

  • 替换Android端初始化时的图标引用,将原来的ic_launcher换成新生成的通知图标:
// 原有配置为ic_launcher,替换为新的通知图标资源
var androidSetting = const AndroidInitializationSettings('@mipmap/ic_notification');
  • 如需自定义图标显示颜色,可放开AndroidNotificationDetails中的color参数,设置为你的应用主题色即可,系统会将图标白色区域渲染为指定颜色:
var androidDetails = const AndroidNotificationDetails(
  'ID',
  'notification',
  priority: Priority.high,
  importance: Importance.max,
  // 替换为你需要的图标颜色
  color: Color.fromARGB(255, 255, 0, 0),
);
注意事项
  • 配置完成后必须先卸载测试设备上的旧应用再重新安装,Android会缓存通知资源,热重载、覆盖安装都可能导致新图标不生效。
  • 如果要实现和iOS完全一致的全彩色通知图标,只能通过自定义通知布局RemoteViews实现,但该方式不符合Android官方设计规范,部分定制ROM可能出现布局错乱、图标被裁剪的问题,非特殊需求不推荐使用。

内容的提问来源于stack exchange,提问作者황희윤

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:42:44