2011-08-28 5 views
43

Мне любопытно, почему метод setLargeIcon в Notification.Builder принимает только Bitmap, без перегрузки, чтобы предоставить идентификатор ресурса. Возможно, это было сделано по соображениям производительности, но кажется странным, поскольку setSmallIcon принимает идентификатор res drawable.Уведомления о сотах - Как установить largeIcon в нужный размер?

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

К сожалению растровое предусмотрено не масштабируется в уведомлении, поэтому нуждается в Bitmap должны быть предоставлены точно правильный размер для представления уведомлений.

Предполагая, что мне нужно предоставить версии xhdpi, hdpi, mdpi и ldpi большого растрового изображения Icon, какие размеры они должны быть? Я не вижу никаких упоминаний в документах или после чистки более широкой сети.

ответ

58

Не была возможность проверить его еще, но API 11 введен следующий общественный Dimens:

должен быть в состоянии использовать их для масштабирования изображения перед установкой это на уведомлении.

+0

А, это интересно. Знаете ли вы, в каких единицах находятся эти значения (17104902, 17104901)? –

+5

Они скорее всего dp в xml. Когда вы используете ресурсы. getDimensionPixelSize() вы получите их в px. – alexanderblom

+5

Спасибо, ребята. Это делает трюк красиво. Я полагаю, что для этого требуется Bitmap, а не resId, он предназначен для использования в социальных сетях, а лица людей обычно не будут распространяться вместе с приложением. width = res.getDimensionPixelSize (android.R.dimen.notification_large_icon_width) –

60

Я использовал dimensions of the notification's large icon создать уменьшенную растровое

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

А потом я поставил большой значок с этим масштабируется bitamp.

+1

Этот ответ заполняет всю картину. Благодаря! – iHearGeoff

+0

Возможно, вы захотите сохранить результат в новой переменной Bitmap scaledContactPic и добавить if (! ContactPic.equals (scaledContactPic)) {contactPic.recycle(); } – malinjir