2011-08-28 4 views
43

Me resulta curioso por qué el método setLargeIcon en Notification.Builder solo acepta un mapa de bits, sin sobrecarga para proporcionar una identificación de recurso. Tal vez se hizo por razones de rendimiento, pero parece extraño, ya que setSmallIcon acepta una ID resitable.Notificaciones Honeycomb - ¿Cómo configurar largeIcon al tamaño correcto?

Notification.Builder builder = new Notification.Builder(application); 
// .... 
builder.setLargeIcon(iconBitmap); // Requires a Bitmap 
builder.setSmallIcon(iconResId); // Requires a drawable resource ID 
Notification notification = builder.getNotification(); 

Por desgracia, el mapa de bits proporcionada no se escala en la notificación, por lo que el mapa de bits se debe proporcionar exactamente el tamaño correcto para la vista notificación.

Suponiendo que necesito proporcionar las versiones xhdpi, hdpi, mdpi y ldpi del mapa de bits largeIcon, ¿qué tamaños necesitan? No puedo ver ninguna mención en los documentos, o después de recorrer la red más amplia.

Respuesta

58

No tuvo la oportunidad de ver todavía, pero API 11 introduce las siguientes Dimens públicas:

deben ser capaces de usarlos para escalar su imagen antes de ajustar en la notificación.

+0

Ah, eso es interesante. ¿Sabes en qué unidades se encuentran esos valores (17104902, 17104901)? –

+5

Lo más probable es que estén dp en el xml. Cuando usas Recursos. getDimensionPixelSize() los obtendrá en px. – alexanderblom

+5

Gracias chicos. Esto hace el truco muy bien. Me imagino la razón por la que requiere un mapa de bits, no un servidor, está diseñado para el uso de redes sociales, y las caras de las personas normalmente no se distribuirán con la aplicación. width = res.getDimensionPixelSize (android.R.dimen.notification_large_icon_width) –

60

he utilizado la dimensions of the notification's large icon para crear un mapa de bits reducido

BitmapDrawable contactPicDrawable = (BitmapDrawable) ContactsUtils.getContactPic(mContext, contactId); 
Bitmap contactPic = contactPicDrawable.getBitmap(); 

Resources res = mContext.getResources(); 
int height = (int) res.getDimension(android.R.dimen.notification_large_icon_height); 
int width = (int) res.getDimension(android.R.dimen.notification_large_icon_width); 
contactPic = Bitmap.createScaledBitmap(contactPic, width, height, false); 

Y entonces me puse el icono grande con este bitamp escala.

+1

Esta respuesta completa la imagen. ¡Gracias! – iHearGeoff

+0

Puede considerar almacenar el resultado en una nueva variable Bitmap scaledContactPic y agregar if (! ContactPic.equals (scaledContactPic)) {contactPic.recycle(); } – malinjir

Cuestiones relacionadas