我正在使用PNG图像,但它的尺寸太大,所以我不得不妥协它的质量。所以我认为矢量可能是另一种方式? 示例将是一个很好的帮助。
答案 0 :(得分:19)
VectorDrawables仅作为高于(或等于)Android Lollipop版本的通知图标 - 即API 21。
我知道这是因为我确实尝试使用.setSmallIcon(R.drawable.my_vector)
,如此处的其中一个答案中所示,虽然这对于API 21及更高版本的效果非常好,但我在Lollipop之前的版本中出现以下错误:< / p>
android.app.RemoteServiceException:从com.example.app包发布错误通知:无法创建图标:StatusBarIcon(pkg = com.example.appuser = 0 id = 0x7f02005a level = 0 visible = true num = 0)
Stack Overflow上还有其他答案支持这个论点:
答案 1 :(得分:10)
我们可以使用VectorDrawable或VectorXML作为推送通知的图标吗?
是的,只需将矢量drawable称为通知的标准方式:
<div ui-grid="taskCtrl.gridOptions" ui-grid-selection ui-grid-auto-resize></div>
为了使用透明度(通知图标只有白色和/或透明),在设置矢量XML中的颜色时必须使用alpha通道,这意味着#00000000表示透明,#FFFFFFF表示白色。 / p>
答案 2 :(得分:2)
UPDATE 2020
是的,绝对有可能。但是让Android Studio负责图标的创建。否则,您将有可能不支持较旧的Android版本(请检查其他答案)。
因此,如何使用Android Studio创建正确的文件:
Android Studio将创建所需的所有正确文件。
答案 3 :(得分: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" />
最重要的东西!
答案 4 :(得分:0)
如果您使用矢量绘图支持包,可能不应在通知中使用VectorDrawable图标 - 您可能会在棒棒糖前设备上遇到错误。
看看这个:Notification throws error when using vector drawables
Wuthout矢量绘图支持包,我没有遇到任何错误但是在使用它之后,棒棒糖前设备在通知时无法访问矢量图标并抛出此错误:
android.app.RemoteServiceException:发布错误通知 package com.xxx.xxx:无法创建图标: StatusBarIcon(pkg = com.xxx.xxxuser = 0 id = 0x7f020082 level = 0 visible = true NUM = 0)
答案 5 :(得分:0)
对于版本&lt; 21,
如果你想直接将vector drawable资源id传递给 setSmallIcon():没办法。
对于 setLargeIcon()间接,是的。使用
int itr=0;
for(Iterator<Map.Entry<String, Boolean>> entries = map.entrySet().iterator; entries.hasNext(); ) {
itr++;
Map.Entry<String, Boolean> entry = entries.next();
if(entry.getValue()) {
name = entry.getKey();
index = itr;
}
}
然后从此drawable创建Bitmap并传入 setLargeIcon()
答案 6 :(得分:0)
如果您坚持使用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());
}