android通知图标显示为白色块

Posted

技术标签:

【中文标题】android通知图标显示为白色块【英文标题】:android notification icon showing as white block 【发布时间】:2016-06-23 16:56:57 【问题描述】:

我在通知中显示图标时遇到问题。我已经通过material designs page 的图标和Notification doc。

我使用了不同的比例,在 BMP 256 颜色格式中:360px、144px、48px、24px 16px 都继续显示白色块。

我将格式更改为 PNG,使用 144px(命名为“ic_notify_icon”,在代码中使用),仍然没有运气。

//Global
private NotificationManager mNotifyManager ;
private Notification mNotify;

private void initialize() 
    mNotifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Notification.Builder mNotificationBuilder = new Notification.Builder(this);
    mNotificationBuilder.setSmallIcon(R.mipmap.ic_notify_icon);
    mNotificationBuilder.setContentTitle("A Title here");
    mNotificationBuilder.setContentText("Some content text here");
    mNotify = mNotificationBuilder.build();
    ShowNotify();


private void ShowNotify()
    //...some code here
    mNotifyMan.notify(0, mNotify);
    //...some code here

有什么建议吗?

附言我看过this post,也是同样的问题,但我觉得它没有帮助/有用,或者我只是不明白要求...

【问题讨论】:

您的通知图片是什么样的?有透明度吗? 不,这是一个简单的白色背景,颜色为大 5,用 MS 油漆制作 - 用于调试的快速图标 是的,这就是问题所在。为了保持一致的外观,生成了图标,以便可以使它们与主题相匹配。您必须将其仅视为前景色和透明度。 @CaseyB 我为我如何解决我的问题添加了一个深入的答案,如果你觉得有必要,你可以看看和改进 【参考方案1】:

我找到了解决办法!

我只发现了有关 android 通知(SDK 22 / 版本 5.1.1)要求的提示,但在搜索了 4 个多小时后,终于找到了一个完整且可行的解决方案。

这是我遵循的步骤,它似乎与各种论坛、问题/答案和文档中提到的内容一致,但没有所需的“步骤/要求”:

创建和准备图像

    根据需要创建您的图像,如果您愿意,可以使用您的应用程序图标: 又快又脏 下载一个应用程序来设置透明度 - 我用IrfanView,效果很好 这是我在 IrfanView 中的图片 在 IrfanView 中打开您的图像,click File > Save As or press 's'

    您应该打开Save Dialog(以及右上角的保存选项对话框 - 如果没有,请在保存对话框的底部选择Save options dialog 复选框,它应该会打开)

    我的设置(默认情况下)是:

    压缩等级 - 6 为透明度使用主窗口颜色 - 已选中 二进制编码 (ICO):使用主窗口颜色作为透明度 - 选中

    选中以下 2 个框:

    保存透明颜色 - 选中(我试过只选中这个,它不起作用 - 有人可以扩展为什么不) 将透明性保存为 Alpha 通道 - 选中 另存为 PNG 文件。 带有保存选项的保存框

在 Android Studio 中:

    Right-Click Drawable folder > Add image asset(任何资源文件夹都应该这样做) 点击顶部下拉列表中的Notification Icon(默认为Launcher Icon) 选择Image > Browse to image> click ok 您会注意到您的图像是灰度的

这是正常的,因为Lollipop SDK (API 21 - Ver 5.0.1) 只允许这种类型的配色方案,在搜索中我遇到了材料设计页面,其中提到了这一行中的一些内容(有人可以扩展这是为什么)

在下面,您会注意到您的通知图标具有不同的“dpi 分辨率”,添加图像通常会显示一个白色块,但添加透明度可以解决此问题。

我相信人们可以从“彩色”的角度来使用它,在这种情况下,IrfanView 有一个默认的黑色背景,这会创建一个相对于这种颜色的“倒置”图像(假设在IrfanView,留下“使用主窗口颜色作为透明度 - 选中”)您可以创建不同且有趣的图像。

我真的希望这会有所帮助!

【讨论】:

非常感谢。它对我有用。我的问题是向下滚动通知栏时,Android O 设备通知图标(白色)没有按原色覆盖。【参考方案2】:

android中的通知图标必须是透明的,没有背景色!

如果图标有圆角颜色背景, 图标会变成一个白色的圆形块。

只有背景非常透明的图标才能用作通知图标。

【讨论】:

【参考方案3】:

我之前也遇到过这个问题,问题是你使用的图片大小,尝试将其调整为32x32 png。

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_tend_notification)
                .setContentTitle(Constants.APP_NAME)
                .setContentText(message)
                .setTicker(message)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());

【讨论】:

不限制特定的屏幕尺寸,例如hdpi,意味着 144px 将允许 xxxhdpi 的最大分辨率,Android Studio 将自动缩放到每个屏幕分辨率?或者通知最大分辨率是否将所有屏幕尺寸限制为 32 像素? 我也是这么想的,但是在努力研究这个问题之后,我发现了这个答案,它似乎适用于包括 nexus 9 平板电脑在内的许多设备。 把你的png图片放到drawable目录中。【参考方案4】:

从link 转换您的 png 图标。希望对你有帮助。

【讨论】:

当我选择添加图像资产 > 通知图标> 选择图像时,我在 Android Studio 中得到相同的输出

以上是关于android通知图标显示为白色块的主要内容,如果未能解决你的问题,请参考以下文章

Android推送通知:通知中未显示图标,而是显示白色方块

三星Android 7中未显示通知图标

Android mipmap 图标作为状态(通知)栏图标

Lollipop上方的推送通知图标为白色[重复]

如何让通知图标在 Android 8.0.0 上正确显示?

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