我正在使用 PNG 图像,但它的尺寸变得太大,所以我不得不妥协它的质量。所以我在想向量可能是另一种方式?示例将是一个很大的帮助。
7 回答
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 上也有其他答案支持这一论点:
我们可以使用 VectorDrawable 或 VectorXML 作为推送通知的图标吗?
是的,只需将矢量 drawable 称为通知的标准方式:
.setSmallIcon(R.drawable.my_vector)
为了使用透明度(通知图标只有白色和/或透明),在矢量 XML 中设置颜色时必须使用 alpha 通道,这意味着 #00000000 表示透明,#FFFFFFFF 表示白色。
如果您坚持使用 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());
}
对于版本 < 21,
如果您想直接将矢量可绘制资源 id 传递给setSmallIcon():没办法。
对于setLargeIcon()间接来说,是的。利用
VectorDrawableCompat drawable = VectorDrawableCompat.create(context.getResources(), resource id, theme);
然后从此可绘制对象创建位图并传递给setLargeIcon()
这是您可以使用 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" />
- 用您的图标替换“ic_http”
- 用你想要的颜色替换“notification_color”
最进口的东西!
- 在您的图标中,所有路径都必须是矢量的!
- 必须没有背景区域!(这很重要,否则它会以您想要的颜色显示矩形区域
如果您使用矢量可绘制支持包,您可能不应该在通知中使用 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)