web-dev-qa-db-fra.com

NotificationCompat 4.1 SetSmallIcon et SetLargeIcon

J'ai utilisé ce code simple pour définir une notification dans Android 4.1 ou supérieur . Il fonctionne bien, mais mon problème vient de SmallIcon et de LargeIcon . la liste déroulante.

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setTicker("The ticker");
builder.setContentTitle("The title");
builder.setContentText("The text");
builder.setSmallIcon(R.drawable.my_small_icon);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.my_96px_large_icon);
builder.setLargeIcon(bm);       
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
nm.notify("direct_tag", NOTIF_ALERTA_ID, builder.build());

Mon problème est:

  1. Lorsque la notification est lancée, une petite icône recadrée surdimensionnée est affichée à côté du texte "Le ticker", au lieu d'afficher l'original SmallIcon sans le surdimensionner .enter image description here

  2. Dans la liste déroulante, je vois le LargeIcon à gauche, c'est bien. Mais je vois aussi la petite icône à droite, à côté de l'heure de la notification. Je ne veux pas montrer que .enter image description here

36
Ton
  1. Dans mon application, je fournis un fichier PNG de grande taille (128x128 px) pouvant être dessiné sous forme de petite icône, et il est mis à l'échelle et sans recadrage. Votre dessin est-il défini dans un fichier bitmap ou peut-être en tant que ressource XML? En XML, vous pouvez spécifier plusieurs aspects de l’affichage (par exemple, le recadrage). Vérifiez votre XML ou utilisez simplement PNG/JPG.

  2. As La documentation de l'API Android sur Notification.setSmallIcon () indique clairement:

    Définissez la petite ressource icon, qui sera utilisée pour représenter la notification dans la barre d'état. Le modèle de plate-forme de la vue développée tracera cette icône à gauche, à moins qu'une grande icône ait également été spécifiée, auquel cas la petite icône sera déplacée vers le côté droit.

Si je comprends bien, il est impossible de remplacer le comportement, sauf si vous fournissez votre propre modèle de notification (via Notification.setContent ()

29
Jerzyna

Il y a un moyen de contourner cette implémentation étrange. Au lieu d'utiliser setLargeIcon, utilisez ceci:

Notification notification=notificationBuilder.build()
notification.contentView.setImageViewResource(Android.R.id.icon, R.drawable.your_large_icon);
15
Thunder

Je suppose que c'est le comportement attendu. 

Vous devriez vérifier que votre petite icône respecte les directives UX pour la taille de l'icône. Les petites icônes sont limitées à 24x24dp.

Le comportement par défaut d'une notification développée consiste à afficher à la fois la grande icône et la petite icône. Je ne suis pas sûr qu'il existe un moyen de se débarrasser de la petite icône, mais pourquoi est-ce important?

9
Joe Malin

Dans mon cas, je viens de définir mon icône rouge en tant que grande icône et le setColor à Color.WHITE et de définir une icône blanche en tant que ma petite icône. De cette façon, dans la zone de notification, mon icône rouge est affichée et l’icône blanche est "disparue".

Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.app_logo);

mBuilder.setContentIntent(resultPendingIntent).setColor(Color.WHITE).setLargeIcon(icon);
0
Hanoch Moreno