2011-08-28 36 views
43

我发现自己很好奇为什么Notification.Builder上的setLargeIcon方法只接受一个位图,没有重载提供一个资源ID。也许这是出于性能原因,但它看起来很奇怪,因为setSmallIcon确实接受一个res可绘制的id。蜂窝通知 - 如何将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(); 

可悲设置在通知不进行缩放,所以位图需要位图以用于通知视图被提供完全正确的尺寸。

假设我需要提供largeIcon位图的xhdpi,hdpi,mdpi和ldpi版本,他们需要的尺寸是多少?我可以在文档中看到没有提及,或者在搜索更广泛的网络之后。

回答

58

没有机会来检查它尚未但API 11引入了下列公共梦诗:

应能设置之前使用这些缩放图像它在通知上。

+0

啊,这很有趣。你知道这些值在哪些单位(17104902,17104901)? –

+5

它们很可能是xml中的dp。当你使用资源。 getDimensionPixelSize()你会在px中得到它们。 – alexanderblom

+5

谢谢你们。这很好地诀窍。我认为它需要一个位图而不是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