我正在使用PNG图像,但它的大小变得太大了,所以我不得不在质量上做出妥协。因此,我想向量可能是另一种解决方法?举个例子会很有帮助。
我正在使用PNG图像,但它的大小变得太大了,所以我不得不在质量上做出妥协。因此,我想向量可能是另一种解决方法?举个例子会很有帮助。
仅当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上还有其他答案支持这个论点:
我们可以将VectorDrawable或VectorXML用作推送通知的图标吗?
可以,只需像标准通知一样调用向量可绘制对象即可:
.setSmallIcon(R.drawable.my_vector)
为了使用透明度(通知图标仅为白色和/或透明),您需要在矢量XML中设置颜色时使用alpha通道,意思是#00000000代表透明,#FFFFFFFF代表白色。在21版本以下,如果想要直接传入矢量图标资源ID到setSmallIcon()中:不可能。
但是对于setLargeIcon()间接传入,可以使用:
VectorDrawableCompat drawable = VectorDrawableCompat.create(context.getResources(), resource id, theme);
然后从这个drawable创建Bitmap并将其传递到setLargeIcon()
在清单文件中添加以下内容:
<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" />
最重要的事情!
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());
}
如果您正在使用矢量图支持包,可能不应在通知中使用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)