当背景颜色为白色时,Android 通知图标颜色不会更改

Posted

技术标签:

【中文标题】当背景颜色为白色时,Android 通知图标颜色不会更改【英文标题】:Android notification icon color is not changed when background color is white 【发布时间】:2016-08-29 07:08:55 【问题描述】:

我升级了 android 6.0 并且我的应用出现了问题。

当状态栏背景颜色不是白色时,通知图标是好的。 (通知图标png只有白色和alpha)

但如果某些应用将背景颜色更改为白色,我的通知图标不会反转为黑色。

当状态栏背景颜色被其他应用程序设置为白色时,如何将白色通知图标反转为黑色? (我不是说如何使用彩色图标。)

下图显示了一个问题。

正常状态

将背景颜色更改为白色时,我的图标不会仅更改为黑色

通知构建代码

  Notification.Builder mBuilder =
          new Notification.Builder(context)
                  .setSmallIcon(R.drawable.ic_notifications_none)
                  .setPriority(priority2)
                  .setOngoing(true);

  mBuilder.setContent(generateMessageView(message));

  Intent notificationIntent = new Intent(context, MainActivity.class);
  notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
                            | Intent.FLAG_ACTIVITY_SINGLE_TOP);

  PendingIntent intent = PendingIntent.getActivity(context, 0,
          notificationIntent, 0);
  NotificationManager mNotificationManager =
          (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
  mBuilder.setContentIntent(intent);
  mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

values-v23/styles.xml

  <style name="AppTheme" parent="android:Theme.Material.NoActionBar">            
  </style>

找到解决方案

我将通知图标添加到drawable 目录而不是drawable-*dpi。现在它正在工作。

【问题讨论】:

看看这个post。另请阅读此documentation。希望你能得到一个线索。干杯.... :) @verbose 我已经阅读过,但会再次检查。谢谢 我尝试了您的解决方案,但它对我不起作用。 我希望你考虑将你的解决方案从问题复制到答案,它只是解决了我的问题,而这个问题的答案没有,但我看到你写的纯粹是运气。我本可以只是路过,找不到合适的答案,然后关闭您的问题,尽管它已经包含我需要的内容。 【参考方案1】:

回答晚了,但对于其他有同样问题的人来说,

我也有这个问题,我发现问题出在图形图标上。 您可以使用此在线工具解决问题。 打开此链接:

https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_stat_call_white

选择你的图片(大尺寸),下载资源并将它们复制到你的项目中。

最后使用.setSmallIcon(R.drawable.ICON_NEW_NAME)设置通知图标

希望对你有帮助

【讨论】:

在android 8版本中显示为深灰色方块【参考方案2】:

我认为问题出在设备 android 5.0 或更高版本上。

https://developer.android.com/design/patterns/notifications.htmlhttps://developer.android.com/about/versions/android-5.0-changes.html

这里有一个解决方案:

Notification notification = new Notification.Builder(context)
        .setAutoCancel(true)
        .setContentTitle("My notification")
        .setContentText("Look, white in Lollipop, else color!")
        .setSmallIcon(getNotificationIcon())
        .build();

return notification;

和方法getNotificationIcon():

private int getNotificationIcon() 
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_black : R.drawable.ic_nomarl;

【讨论】:

谢谢,但它不起作用。我从 android 示例中找到了 LNotifications,当其他应用程序使用白色状态栏运行时,它没有黑色图标图像,而是白色到黑色(深灰色)。而且我没有从 LNotifications 中找到任何改变颜色的特殊代码。

以上是关于当背景颜色为白色时,Android 通知图标颜色不会更改的主要内容,如果未能解决你的问题,请参考以下文章

Android实现修改状态栏背景字体和图标颜色的方法

Android实现修改状态栏背景字体和图标颜色的方法

android通知图标显示为白色块

如果使用 Parse Push,是不是可以为 Android 上的通知抽屉中的图标设置背景颜色?

如何自定义状态栏图标和文字颜色?例如。状态栏背景:白色,状态栏图标颜色,文字:红色

当 primaryDark 为白色时更改状态栏文本颜色