2011-08-28 28 views
43

Notification.BuilderのsetLargeIconメソッドが、リソースIDを提供するためのオーバーロードなしでBitmapのみを受け入れるのはなぜか不思議です。おそらくそれはパフォーマンス上の理由から行われたかもしれませんが、setSmallIconはres drawable 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バージョンを提供する必要があると仮定すると、彼らがするのかなサイズが必要ですか?私はドキュメントで、またはより広いWebを精査した後、言及を見ることができません。

答えて

58

まだそれをチェックする機会があったが、API 11は、次のパブリックdimens導入されていない:

を設定する前に、あなたの画像を拡大縮小するために、それらを使用することができるはずですがそれは通知にあります。

+0

ああ、それは面白いです。それらの値の単位が分かりますか(17104902、17104901) –

+5

これはおそらくXMLのdpです。リソースを使用する場合getDimensionPixelSize()でそれらをpxで取得します。 – alexanderblom

+5

ありがとうございました。これはうまくトリックを行います。私はビットマップが必要な理由を理解しています。ソーシャルメディア用に設計されたもので、人々の顔は通常、アプリと共に配布されません。 width = res.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) –

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

を作成するためにdimensions of the notification's large iconを使用そして私は、このスケーリングされたbitampと大きいアイコンを設定します。

+1

この答えは画像全体を完成させます。ありがとう! – iHearGeoff

+0

新しい変数のビットマップscaledContactPicに結果を格納し、if(!contactPic.equals(scaledContactPic)){contactPic.recycle();を追加するとよいでしょう。 } – malinjir

関連する問題