2011-08-28 18 views
43

Tôi thấy mình tò mò tại sao phương thức setLargeIcon trên Notification.Builder chỉ chấp nhận một Bitmap, không có quá tải để cung cấp một id tài nguyên. Có lẽ nó đã được thực hiện vì lý do hiệu suất, nhưng nó có vẻ kỳ lạ như setSmallIcon không chấp nhận một id resable res.Thông báo về tổ ong - Cách đặt largeIcon thành đúng kích cỡ?

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

Đáng buồn là bitmap được cung cấp không được chia tỷ lệ trong thông báo, do đó Bitmap cần được cung cấp đúng kích cỡ cho chế độ xem thông báo.

Giả sử tôi cần cung cấp các phiên bản xhdpi, hdpi, mdpi và ldpi của bitmap largeIcon, chúng cần phải có kích thước nào? Tôi có thể thấy không có đề cập trong tài liệu, hoặc sau khi cọ rửa các trang web rộng lớn hơn.

Trả lời

58

Không có một cơ hội để kiểm tra xem nó được nêu ra nhưng API 11 giới thiệu dimens nào sau đây:

nên có thể sử dụng những quy mô hình ảnh của bạn trước khi thiết lập nó trên thông báo.

+0

Ah, điều đó thật thú vị. Bạn có biết những đơn vị đó có giá trị nào không (17104902, 17104901)? –

+5

Chúng rất có thể là dp trong xml. Khi bạn sử dụng Tài nguyên. getDimensionPixelSize() bạn sẽ nhận được chúng trong px. – alexanderblom

+5

Xin cảm ơn các bạn. Điều này thực hiện các trick độc đáo. Tôi tìm lý do nó đòi hỏi một Bitmap không phải là một resId là nó được thiết kế để sử dụng phương tiện truyền thông xã hội, và khuôn mặt của người dân sẽ không thường được phân phối với các ứng dụng. width = res.getDimensionPixelSize (android.R.dimen.notification_large_icon_width) –

60

tôi đã sử dụng dimensions of the notification's large icon để tạo ra một bitmap quy mô

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

Và sau đó tôi thiết lập các biểu tượng lớn với bitamp quy mô này.

+1

Câu trả lời này hoàn thành toàn bộ bức tranh. Cảm ơn! – iHearGeoff

+0

Bạn có thể xem xét lưu trữ kết quả vào một biến Bitmap scaledContactPic mới và thêm if (! ContactPic.equals (scaledContactPic)) {contactPic.recycle(); } – malinjir

Các vấn đề liên quan