2011-08-28 42 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