蜂窝通知 - 如何将largeIcon设置为正确的大小?

Oll*_*e C 44 android android-notifications android-3.0-honeycomb

我发现自己好奇为什么Notification.Builder上的setLargeIcon方法只接受一个Bitmap,没有重载来提供资源id.也许这是出于性能原因而做的,但似乎很奇怪,因为setSmallIcon确实接受了res drawable id.

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();
Run Code Online (Sandbox Code Playgroud)

遗憾的是,提供的位图未在通知中缩放,因此需要为通知视图提供完全正确大小的位图.

假设我需要提供largeIcon位图的xhdpi,hdpi,mdpi和ldpi版本,它们需要具有哪些大小?我可以在文档中看到没有提及,或者在浏览更广泛的网络之后.

小智 61

没有机会检查它,但API 11引入了以下公共维度:

在通知上设置之前,应该能够使用它们来缩放图像.

  • 所以最好的解决方案是:`int width = getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_width);``int height = getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_height);` (6认同)
  • 它们很可能是xml中的dp.当您使用资源时.getDimensionPixelSize()你会在px中得到它们. (5认同)
  • 多谢你们.这很好地解决了这个问题.我认为它需要一个Bitmap而不是resId的原因是它是专为社交媒体使用而设计的,人们的面孔通常不会随应用程序一起分发.width = res.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) (5认同)
  • 这是64dp x 64dp https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/dimens.xml#L150 (4认同)

too*_*o42 60

我使用通知的大图标尺寸来创建缩放的位图

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); 
Run Code Online (Sandbox Code Playgroud)

然后我用这个缩放的bitamp设置大图标.