为什么在Android Lollipop中使用Notification.Builder.setSmallIcon设置的图标显示为白色方块?

时间:2014-11-28 12:28:03

标签: android notifications android-5.0-lollipop android-notification-bar

我有这段代码:

Notification notif;

// Build notification
Notification.Builder notifBuilder = new Notification.Builder(context);
notifBuilder.setContentIntent(pendingIntent);
notifBuilder.setContentTitle(title);
notifBuilder.setSmallIcon(icon_resId);
notifBuilder.setContentText(ne.getCaption());
notifBuilder.setDefaults(Notification.DEFAULT_ALL);
notifBuilder.setAutoCancel(autocancel);
notifBuilder.setWhen(System.currentTimeMillis());
notif = notifBuilder.build();

在Android 4.4中运行良好。

但是,在Android 5.0中,状态栏中显示的图标是白色方块。 <> p>,当设备被锁定时出现的新“通知体”中显示的图标是正确的。

http://developer.android.com/reference/android/app/Notification.Builder.html中,我没有看到有关API级别21中的通知图标的任何新内容

8 个答案:

答案 0 :(得分:30)

查看文档: http://developer.android.com/design/style/iconography.html

有词:“通知图标必须完全是白色。此外,系统可能会缩小和/或使图标变暗。”

答案 1 :(得分:29)

我已解决将图标大小更改为16x16像素并仅使用白色

答案 2 :(得分:4)

正如通知中的Android开发者网站的Android 5.0行为更改中所述:

在白色(或非常浅)背景上使用深色文本绘制通知,以匹配新材质设计小部件。使用新的配色方案确保所有通知都正确。如果您的通知看起来不对,请修复它们:

使用setColor()在图标图像后面的圆圈中设置强调色。 更新或删除涉及颜色的资产。系统会忽略操作图标和主通知图标中的所有非Alpha通道。您应该假设这些图标仅为alpha。系统以白色绘制通知图标,以深灰色绘制动作图标。

http://developer.android.com/about/versions/android-5.0-changes.html

答案 3 :(得分:4)

重复:Notification bar icon turns white in Android 5 Lollipop

简介:

Android 5更新 https://developer.android.com/about/versions/android-5.0-changes.html 通知 - &gt;材料设计风格

  

更新或删除涉及颜色的资产。系统忽略所有   动作图标和主要通知图标中的非Alpha通道。   您应该假设这些图标仅为alpha。系统   在深灰色的白色和动作图标中绘制通知图标。

可以使用(默认为灰色)设置小图标背景颜色:

ormlite

答案 4 :(得分:1)

将此添加到您的清单中-

 <meta-data android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_notification" />

答案 5 :(得分:0)

在Android 5.0中,状态栏中显示的图标是白色方块,因为5.0 Lollipop &#34;通知图标必须完全为白色&#34;

您可以在“材质”图标上轻松找到此类图标。 访问:https://material.io/icons/

Google还建议我们使用自定义颜色,该颜色将使用setColor()方法显示在白色通知图标后面。

有关详细信息,请访问:https://developer.android.com/about/versions/android-5.0-changes.html

答案 6 :(得分:0)

仍然有人在看这个,让图标正确显示的最简单方法是首先在此处使用Android Icon Studio进行渲染:

https://romannurik.github.io/AndroidAssetStudio/icons-notification.html

将下载的zip文件中的文件解压缩到您的项目/ main文件夹中,以便将它们放入相关的drawable-xxxx文件夹中。

然后,要更改通知中的颜色,请使用以下内容:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notification_appicon) // <-- Icon from Android Icon Studio 
    .setColor(context.getColor(R.color.holo_blue))    // <-- Set your preferred icon colour to appear in the notification dropdown list
    .setContentTitle("Title")
    .setContentText("Content")
    .setAutoCancel(true)
    .setCategory(NotificationCompat.CATEGORY_EVENT)
    .setDefaults(Notification.DEFAULT_ALL)
    .setPriority(NotificationCompat.PRIORITY_DEFAULT);

答案 7 :(得分:-4)

android:targetSdkVersion="21"移除manifest.xml。 它会起作用!