it-swarm.com.de

NotificationCompat 4.1 SetSmallIcon und SetLargeIcon

Ich habe diesen einfachen Code verwendet, um eine Benachrichtigung in Android 4.1 oder höher einzurichten. Es funktioniert gut, aber mein Problem ist bei SmallIcon und LargeIcon .. Ich verstehe, dass SmallIcon in der Statusleiste angezeigt wird und LargeIcon in angezeigt wird die Dropdown-Liste.

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());

Mein Problem ist:

  1. Wenn die Benachrichtigung gestartet wird, wird ein kleines übergroßes kleines Symbol neben dem Text "The Ticker" angezeigt, anstatt das ursprüngliche SmallIcon ohne Übergröße anzuzeigen.enter image description here

  2. In der Dropdown-Liste sehe ich links das LargeIcon, das ist gut. Ich sehe aber auch das kleine Symbol rechts neben dem Zeitpunkt der Benachrichtigung. Ich möchte das nicht zeigen.enter image description here

36
Ton
  1. In meiner Anwendung stelle ich großes (128x128 px) PNG-Zeichen dar, das als kleines Symbol gezeichnet werden kann, und es wird skaliert und ohne Zuschneiden angezeigt. Ist Ihre Zeichnung in einer Bitmap-Datei oder möglicherweise als XML-Ressource definiert? In XML können Sie verschiedene Aspekte der Anzeige angeben (z. B. Zuschneiden). Überprüfen Sie Ihr XML noch einmal oder verwenden Sie einfach PNG/JPG.

  2. Wie Android-API-Dokumentation zu Notification.setSmallIcon () besagt eindeutig:

    Legen Sie die kleine Symbolressource fest, die zur Darstellung der Benachrichtigung in der Statusleiste verwendet wird. Die Plattformvorlage für die erweiterte Ansicht zeichnet dieses Symbol auf der linken Seite, es sei denn, es wurde auch ein großes Symbol angegeben. In diesem Fall wird das kleine Symbol nach rechts verschoben.

AFAIK Es gibt keine Möglichkeit, das Verhalten zu überschreiben, es sei denn, Sie stellen eine eigene Benachrichtigungsvorlage bereit (über Notification.setContent ()

29
Jerzyna

Es gibt einen Weg, um diese seltsame Implementierung zu umgehen. Verwenden Sie statt setLargeIcon folgendes:

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

Ich vermute, dass dies das erwartete Verhalten ist. 

Sie sollten prüfen, ob Ihr kleines Symbol den UX-Richtlinien für die Symbolgröße entspricht. Kleine Icons sind auf 24x24dp begrenzt.

Das Standardverhalten einer erweiterten Benachrichtigung besteht darin, sowohl das große Symbol als auch das kleine Symbol anzuzeigen. Ich bin nicht sicher, ob es eine Möglichkeit gibt, das kleine Symbol zu entfernen, aber warum ist das wichtig?

9
Joe Malin

In meinem Fall habe ich nur mein rotes Symbol als großes Symbol und setColor auf Color.WHITE gesetzt und ein weißes Symbol als kleines Symbol. Auf diese Weise wird im Benachrichtigungsbereich mein rotes Symbol angezeigt und das weiße Symbol "verschwindet".

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

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