2012-12-12 1 views
36

Ho utilizzato questo semplice codice per impostare una notifica in Android 4.1 o versioni successive. Funziona bene, ma il mio problema si presenta con SmallIcon e LargeIcon. Capisco che SmallIcon è mostrato nella barra di stato e LargeIcon è mostrato nell'elenco a discesa.NotificationCompat 4.1 SetSmallIcon e SetLargeIcon

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

Il mio problema è:

  1. Quando la notifica viene lanciato, un ritagliata sovradimensionato piccola icona viene visualizzata accanto a "The Ticker" del testo, invece di mostrare lo SmallIcon originale senza sovradimensionare esso. enter image description here

  2. Nell'elenco a discesa vedo LargeIcon a sinistra, va bene. Ma vedo anche la piccola icona a destra, accanto al momento della notifica. Non voglio dimostrarlo. enter image description here

+0

Ho difficoltà a risolvere questo, ogni possibilità di chiarire che cosa è necessario? La risposta accettata non mi dice esattamente cosa fare –

+0

@AndrewBullock - 'builder.setSmallIcon (0);' funziona per te? Dovrebbe disabilitare la piccola icona quando viene utilizzato uno grande. – tomash

risposta

27
  1. Nella mia applicazione fornisco PNG grande (128x128 px) drawable come icona piccola, e mostra in scala e senza ritaglio. Il tuo drawable è definito nel file bitmap o forse come risorsa XML? In XML è possibile specificare diversi aspetti della visualizzazione (ad es. Ritaglio). Controlla il tuo XML o usa solo PNG/JPG.

  2. Come Android API documentation on Notification.setSmallIcon() afferma chiaramente:

    Impostare la piccola icona di risorsa, che sarà utilizzato per rappresentare la notifica nella barra di stato. Il modello di piattaforma per la vista espansa disegnerà questa icona a sinistra, a meno che non sia stata specificata anche un'icona grande, nel qual caso l'icona piccola verrà spostata sul lato destro.

Per quanto ne sappia non c'è modo è possibile ignorare il comportamento, a meno che non fornire il proprio modello di notifica (via Notification.setContent()

9

Direi che questo è il comportamento previsto.

Controllare che l'icona piccola segua le linee guida UX per le dimensioni dell'icona. Le icone piccole sono limitate a 24x24dp.

Il comportamento predefinito di una notifica espansa è di mostrare sia l'icona grande che l'icona piccola. Non sono sicuro che ci sia un modo per sbarazzarsi della piccola icona, ma perché è così importante?

+1

È importante perché la mia applicazione è l'unica che mostra quella piccola icona accanto all'ora. – Ton

+0

Ho risolto questo problema nella mia app utilizzando la stessa icona LARGE che ho tutto questo tempo e ridimensionando l'icona SMALL a 24x24dp (ad esempio 24 per 24 pixel). Grazie mille per questa nota di dimensioni, come la vedo da nessun'altra parte. –

+1

Dove sono le linee guida UX? –

-1

Nel mio caso ho immagine icona non avevo messo in tutte le cartelle (xhdpi, hdpi, MDPI, ldpi)

15

C'è un modo per aggirare questo strano implementazione Invece di usare setLargeIcon uso questo:..

Notification notification=notificationBuilder.build() 
notification.contentView.setImageViewResource(android.R.id.icon, R.drawable.your_large_icon); 
+0

Bel trucco. Evita i meccanismi per l'interazione di icone di piccole e grandi dimensioni e modifica semplicemente la visualizzazione di immagini dopo la creazione della notifica. – GregD

+0

Obsoleto. Ma a quanto pare è possibile utilizzare NotificationCompat.Builder.setCustomContentView (RemoteViews). – Swindler

0

Nel mio caso, ho appena impostato la mia icona rossa come icona grande e setColor in Color.WHITE e impostato un'icona bianca come mia piccola icona. In questo modo, nell'area delle notifiche, viene visualizzata la mia icona rossa e l'icona bianca è "scomparsa".

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

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