我们可以使用 VectorDrawable 或 VectorXML 作为 android 中推送通知的图标吗?

Can we use VectorDrawable or VectorXML as icons for push notifications in android?

我正在使用 PNG 图片,但它的尺寸太大了,所以我不得不在质量上做出妥协。所以我在想向量可能是另一种方式? 例子会有很大帮助。

Can we use VectorDrawable or VectorXML as icons for push notifications?

是的,只需将矢量可绘制对象称为通知的标准方式即可:

.setSmallIcon(R.drawable.my_vector)

为了使用透明度(通知图标只有白色 and/or 透明),在设置矢量颜色时必须使用 alpha 通道 XML,意思是 #00000000透明和 #FFFFFFFF 为白色。

如果您使用矢量可绘制支持包,您可能不应该在通知中使用 VectorDrawable 图标 - 您可能会在棒棒糖之前的设备上遇到错误。

看看这个:

没有矢量可绘制支持包,我没有遇到任何错误,但在使用它之后,棒棒糖之前的设备在通知时无法访问矢量图标并抛出此错误:

android.app.RemoteServiceException: Bad notification posted from package com.xxx.xxx: Couldn't create icon: StatusBarIcon(pkg=com.xxx.xxxuser=0 id=0x7f020082 level=0 visible=true num=0)

VectorDrawables 仅作为高于(或等于)Android Lollipop 版本的通知图标 - 即 API 21.

我知道这一点,因为我确实尝试使用 .setSmallIcon(R.drawable.my_vector),如此处的其他答案之一所示,尽管这对 API 21 及更高版本非常有效,但我收到以下错误Lollipop 之前的版本:

android.app.RemoteServiceException: Bad notification posted from package com.example.app: Couldn't create icon: StatusBarIcon(pkg=com.example.appuser=0 id=0x7f02005a level=0 visible=true num=0 )

Stack Overflow 上还有其他答案支持这个论点:

版本 < 21,

如果想直接传入vector drawable resource id到setSmallIcon(): 不行

对于setLargeIcon()是间接的,是的。使用

VectorDrawableCompat drawable = VectorDrawableCompat.create(context.getResources(), resource id, theme);

然后从该可绘制对象创建位图并传递给 setLargeIcon()

如果您坚持使用 Vector drawable,请尝试将其转换为 bitmap :

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.my_vector_drawable);
                    mBuilder = new NotificationCompat.Builder(context)
                            .setLargeIcon(bitmap)
                            .setOngoing(!cancelable);

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        mBuilder.setSmallIcon(getNotificationIcon());
                    }

2020 年更新

是的,绝对有可能。但是让 Android Studio 负责图标的创建。否则你将面临不支持旧 Android 版本的风险(检查其他答案)。

那么如何使用 Android Studio 创建正确的文件:

  1. 右击Android工作室左侧的文件
  2. 新建 > 图像资源
  3. 图标类型 > 通知图标

  1. Select 矢量图像(例如 .svg)

Android studio 将创建所需的所有正确文件。

您可以使用 Firebase 通知执行以下操作

在清单中添加这些:

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


    <meta-data android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/notification_color" />
  1. 用您的图标替换“ic_http”
  2. 用你想要的颜色替换“notification_color”

最重要的东西!

  1. 在你的图标中,所有路径必须是 Vectoral!
  2. 不能有背景区! (这很重要,否则 它会显示矩形 区域的颜色