25

我正在使用 PNG 图像,但它的尺寸变得太大,所以我不得不妥协它的质量。所以我在想向量可能是另一种方式?示例将是一个很大的帮助。

4

7 回答 7

26

VectorDrawables 只能用作高于(或等于)Android Lollipop 版本的通知图标 - 即 API 21。

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

android.app.RemoteServiceException:从包 com.example.app 发布的错误通知:无法创建图标:StatusBarIcon(pkg=com.example.appuser=0 id=0x7f02005a level=0 visible=true num=0)

Stack Overflow 上也有其他答案支持这一论点:

于 2016-09-08T03:38:53.247 回答
17

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

是的,只需将矢量 drawable 称为通知的标准方式:

.setSmallIcon(R.drawable.my_vector)

为了使用透明度(通知图标只有白色和/或透明),在矢量 XML 中设置颜色时必须使用 alpha 通道,这意味着 #00000000 表示透明,#FFFFFFFF 表示白色。

于 2016-05-17T13:20:43.197 回答
4

2020 年更新

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

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

  1. 右键单击Android Studio左侧的文件
  2. 新建 > 图像资源 在此处输入图像描述
  3. 图标类型 > 通知图标

在此处输入图像描述

  1. 选择矢量图像(例如 .svg)

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

于 2020-07-13T12:39:12.087 回答
1

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

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());
                    }
于 2019-06-08T09:59:45.260 回答
1

对于版本 < 21,

如果您想直接将矢量可绘制资源 id 传递给setSmallIcon():没办法。

对于setLargeIcon()间接来说,是的。利用

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

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

于 2017-02-15T09:13:31.617 回答
1

这是您可以使用 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. 在您的图标中,所有路径都必须是矢量的!
  2. 必须没有背景区域!(这很重要,否则它会以您想要的颜色显示矩形区域
于 2021-02-11T07:43:22.377 回答
0

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

看看这个:Notification throws error when using vector drawables

Wuthout矢量可绘制支持包,我没有遇到任何错误,但使用后,pre-lollipop设备在通知时无法访问矢量图标并抛出此错误:

android.app.RemoteServiceException:从包 com.xxx.xxx 发布的错误通知:无法创建图标:StatusBarIcon(pkg=com.xxx.xxxuser=0 id=0x7f020082 level=0 visible=true num=0)

于 2016-09-07T03:28:20.453 回答