web-dev-qa-db-fra.com

Pouvons-nous utiliser VectorDrawable ou VectorXML comme icônes pour les notifications Push sous Android?

J'utilise une image PNG mais sa taille devient trop grande et je dois donc faire des compromis sur sa qualité. Donc, je pensais que les vecteurs pourraient être l'inverse? L'exemple sera d'une grande aide.

16
Rajan Kadeval

Pouvons-nous utiliser VectorDrawable ou VectorXML comme icônes pour les notifications Push?

Oui, il suffit d'appeler le vecteur drawable de manière standard pour les notifications:

.setSmallIcon(R.drawable.my_vector)

Pour utiliser la transparence (les icônes de notification sont uniquement blanches et/ou transparentes), vous devez utiliser les canaux alpha lors de la définition des couleurs dans le vecteur XML, ce qui signifie # 00000000 pour transparent et #FFFFFFFF pour blanc.

9
Yoann Hercouet

VectorDrawables fonctionnera uniquement en tant qu’icônes de notification pour les versions supérieures à Android Lollipop (c’est-à-dire, API 21).

Je le sais parce que j’ai essayé d’utiliser .setSmallIcon(R.drawable.my_vector) comme indiqué dans l’une des réponses précédentes, et bien que cela fonctionne parfaitement pour API 21 et les versions ultérieures, l’erreur suivante s’est produite pour les versions antérieures à Lollipop:

Android.app.RemoteServiceException: notification incorrecte postée du package com.example.app: impossible de créer une icône: StatusBarIcon (pkg = com.example.appuser = 0 id = 0x7f02005a level = 0 visible = true num = 0)

Il existe également d'autres réponses sur Stack Overflow prenant en charge cet argument:

18

Si vous utilisez un package de support pour dessin vectoriel, vous ne devriez probablement pas utiliser d'icônes VectorDrawable dans les notifications; vous pourriez rencontrer des erreurs sur les périphériques antérieurs à Lollipop.

Découvrez ceci: La notification génère une erreur lors de l’utilisation de vector drawables

Le paquet de support de dessin vectoriel de Wuthout, je n’ai rencontré aucune erreur, mais après l’avoir utilisé, les périphériques antérieurs à Lollipop n’étaient pas en mesure d’accéder à l’icône du vecteur au moment de la notification et lançaient cette erreur:

Android.app.RemoteServiceException: notification incorrecte postée à partir du paquet Com.xxx.xxx: impossible de créer une icône: StatusBarIcon (pkg = com.xxx.xxxuser = 0 id = 0x7f020082 level = 0 visible = true num = 0)

0
Mohit Singh

Pour la version <21, 

Si vous voulez passer directement l'ID de ressource pouvant être dessinée par vecteur dans setSmallIcon () : No way.

Pour setLargeIcon () indirectement, oui. Utilisation

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

puis créez Bitmap à partir de ce dessin et passez-le dans setLargeIcon ()

0
Brian Chu