web-dev-qa-db-fra.com

Notifications Honeycomb - Comment définir largeIcon à la bonne taille?

Je me demande pourquoi la méthode setLargeIcon sur Notification.Builder n'accepte qu'un Bitmap, sans surcharge pour fournir un identifiant de ressource. Peut-être que cela a été fait pour des raisons de performances, mais cela semble étrange car setSmallIcon accepte un identifiant res drawable.

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

Malheureusement, le bitmap fourni n'est pas mis à l'échelle dans la notification, le Bitmap doit donc être fourni exactement à la bonne taille pour la vue de notification.

En supposant que je doive fournir des versions xhdpi, hdpi, mdpi et ldpi du bitmap largeIcon, quelles tailles doivent-elles être? Je ne vois aucune mention dans les documents, ou après avoir parcouru le Web au sens large.

45
Ollie C

Je n'ai pas encore eu l'occasion de le vérifier, mais l'API 11 a introduit les dimens publics suivants:

Devrait pouvoir les utiliser pour mettre à l'échelle votre image avant de la définir sur la notification.

62
crafty

J'ai utilisé dimensions de la grande icône de la notification pour créer une image bitmap mise à l'échelle

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

Et puis j'ai mis la grande icône avec ce bitamp à l'échelle.

61
toobsco42