सवाल हनीकॉम अधिसूचनाएं - बड़े आकार को सही आकार में कैसे सेट करें?


मुझे खुद को उत्सुक लगता है कि अधिसूचना पर setLargeIcon विधि क्यों है। बिल्डर केवल एक बिटमैप स्वीकार करता है, संसाधन संसाधन प्रदान करने के लिए कोई अधिभार नहीं है। शायद यह प्रदर्शन कारणों से किया गया था, लेकिन यह अजीब लगता है क्योंकि सेटस्माल आइकन एक पुन: प्रयोज्य आईडी स्वीकार करता है।

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

अफसोस की बात है कि प्रदान की गई बिटमैप अधिसूचना में स्केल नहीं की गई है, इसलिए बिटमैप को अधिसूचना दृश्य के लिए बिल्कुल सही आकार प्रदान करने की आवश्यकता है।

मान लीजिए कि मुझे bigIcon बिटमैप के xhdpi, hdpi, mdpi और ldpi संस्करण प्रदान करने की आवश्यकता है, उन्हें किस आकार की आवश्यकता है? मैं दस्तावेज़ों में कोई उल्लेख नहीं कर सकता, या व्यापक वेब को खराब करने के बाद।


44
2017-08-28 11:46


मूल




जवाब:


इसे अभी तक जांचने का मौका नहीं मिला लेकिन एपीआई 11 ने निम्नलिखित सार्वजनिक आयाम पेश किए:

अधिसूचना पर सेट करने से पहले अपनी छवि को स्केल करने के लिए उन लोगों का उपयोग करने में सक्षम होना चाहिए।


60
2017-08-28 17:04



आह, यह दिलचस्प है। क्या आप जानते हैं कि उन मानों में कौन सी इकाइयां हैं (17104 9 0, 17104901)? - Ollie C
वे एक्सएमएल में डीपी की सबसे अधिक संभावना है। जब आप संसाधनों का उपयोग करते हैं। getDimensionPixelSize () आप उन्हें पीएक्स में प्राप्त करेंगे। - alexanderblom
धन्यवाद दोस्तों। यह अच्छी तरह से चाल है। मुझे लगता है कि इसे बिटमैप की आवश्यकता नहीं है, यह एक ऐसा नहीं है जिसे यह सोशल मीडिया उपयोग के लिए डिज़ाइन किया गया है, और लोगों के चेहरे आम तौर पर ऐप के साथ वितरित नहीं किए जाएंगे। चौड़ाई = res.getDimensionPixelSize (android.R.dimen.notification_large_icon_width) - Ollie C
वह 64 डीपी एक्स 64 डीपी है github.com/android/platform_frameworks_base/blob/master/core/... - Jeroen
तो सबसे अच्छा समाधान है: int width = getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_width);  int height = getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_height); - Paul Woitaschek


मैंने इस्तेमाल किया अधिसूचना के बड़े आइकन के आयाम एक स्केल्ड बिटमैप बनाने के लिए

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

और फिर मैंने इस स्केल किए गए बिटैम्प के साथ बड़ा आइकन सेट किया।


60
2018-01-21 18:38



यह जवाब पूरी तस्वीर को पूरा करता है। धन्यवाद! - iHearGeoff
आप नतीजे को एक नए वैरिएबल बिटमैप स्केल किए गए कॉन्टैक्टपिक में संग्रहीत करने पर विचार कर सकते हैं और जोड़ सकते हैं (! ContactPic.equals (स्केल कॉन्टैक्टिक)) {contactPic.recycle (); } - malinjir