एंड्रॉइड 5 लॉलीपॉप में नोटिफिकेशन बार आइकन सफेद हो जाता है


207

मेरे पास कस्टम सूचना दिखाने वाला एक ऐप है। समस्या यह है कि एंड्रॉइड 5 में चलने पर नोटिफिकेशन बार में छोटा आइकन सफेद रंग में दिखाया गया है। मैं इसे कैसे ठीक करूं?


राहुल शर्मा और बासियम का यहाँ बेहतर जवाब है - stackoverflow.com/questions/30795431/…
रिवू चक्रवर्ती

यह मेरे साथ होता है जब एंड्रॉइड 6 में चल रहा है, न कि 5.
Jaime Montoya

निश्चित रूप से, यह एंड्रॉइड 5+ के साथ होता है, निश्चित रूप से एंड्रॉइड 6 और 7 में भी। प्रश्न के समय तक एंड्रॉइड 5 नवीनतम संस्करण था और इस मुद्दे का कारण यह फीचर एंड्रॉइड 5 में पेश किया गया था
एलेजांद्रो कैसानोवा

मुझे लगता है कि एपीआई स्तर 21 (एंड्रॉइड 5.0), एपीआई स्तर 22 (एंड्रॉइड 5.1), एपीआई स्तर 23 (एंड्रॉइड 6.0), आदि को "एंड्रॉइड 5" शब्द कहना अस्पष्ट है क्योंकि आप एंड्रॉइड 5.0 के बारे में बात कर सकते हैं। या एंड्रॉइड 5.1, और जब मैं सूचनाओं का परीक्षण कर रहा हूं और जिस तरह से आइकन एपीआई स्तर 22 वी में दिखाई देंगे। एपीआई स्तर 23, मैंने महसूस किया है कि वे अलग तरह से व्यवहार करते हैं।
जैमे मोंटोया

जवाबों:


269

स्वीकृत उत्तर सही (पूर्णतः) नहीं है। ज़रूर, यह नोटिफिकेशन आइकॉन को रंग में दिखाता है, लेकिन एक बड़ी कमी के साथ ऐसा करता है - लक्ष्य एसडीके को एंड्रॉइड लॉलीपॉप से ​​कम करने के लिए सेट करके!

यदि आप सुझाव के अनुसार अपने लक्ष्य एसडीके को 20 तक सेट करके अपनी सफेद आइकन समस्या को हल करते हैं, तो आपका ऐप एंड्रॉइड लॉलीपॉप को लक्षित नहीं करेगा, जिसका अर्थ है कि आप लॉलीपॉप-विशिष्ट सुविधाओं का उपयोग नहीं कर सकते।

Http://developer.android.com/design/style/iconography.html पर एक नज़र डालें , और आप देखेंगे कि सफेद शैली यह है कि एंड्रॉइड लॉलीपॉप में सूचनाओं को कैसे प्रदर्शित किया जाता है।

लॉलीपॉप में, Google यह भी सुझाव देता है कि आप एक ऐसे रंग का उपयोग करें जिसे (सफेद) अधिसूचना आइकन के पीछे प्रदर्शित किया जाएगा - https://developer.android.com/about/versions/android-5.0-changes.html

इसलिए, मुझे लगता है कि एक बेहतर समाधान ऐप में एक सिल्हूट आइकन जोड़ना है और इसका उपयोग करना है यदि डिवाइस एंड्रॉइड लॉलीपॉप चला रहा है।

उदाहरण के लिए:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

और, GetNotificationIcon विधि में:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}

34
आप सिल्हूट कैसे उत्पन्न करते हैं? मैं बिना किसी फोटोशॉप स्किल के साथ डेवलपर हूं और ऑनलाइन टूल्स का इस्तेमाल करके बैकग्राउंड को पारदर्शी बनाना अब भी सफेद आइकनों का नतीजा है।
चैतन्य

6
@ कुचैतन्य जीआईएमपी का प्रयोग करें :)
बाइटमॉफ़ जूल

4
यह समाधान इस सवाल का जवाब नहीं देता है कि एंड्रॉइड बिल्ड प्रक्रिया पूरी तरह से सही PNG को संशोधित क्यों करती है और इसे संकुचित करती है और अल्फा चैनल को हटा देती है।
philk

6
developer.android.com/design/style/iconography.html पर सामग्री की ओर जाता है। ctrl+fnotification
SEOstyle

4
कोड अप्पेल प्लेटफॉर्म वर्जन मॉडिफ़ायर से लेकर ड्रॉएबल फोल्डर - ड्रॉएबल /
ड्रॉएबल-वी

72

उपयोगकर्ता डैनियल सैडी के साथ पूरी तरह से सहमत हैं। आदेश में करने के लिए Colorके लिए NotificationIconमैं इस सवाल का जवाब लिख रहा हूँ।

इसके लिए आपको आइकन बनाना होगा Silhouetteऔर Transparentजहाँ भी आप जोड़ना चाहें, कुछ सेक्शन बना सकते हैं Colors। अर्थात,

यहां छवि विवरण दर्ज करें

आप अपने रंग का उपयोग करके जोड़ सकते हैं

.setColor(your_color_resource_here)

नोट: setColorकेवल में उपलब्ध है Lollipop, आप की जाँच करने के लिए हैOSVersion

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Notification notification = new Notification.Builder(context)
    ...
} else {
    // Lollipop specific setColor method goes here.
    Notification notification = new Notification.Builder(context)
    ...
    notification.setColor(your_color)
    ...            
}

आप इसे Lollipopलक्ष्य के रूप में उपयोग करके भी प्राप्त कर सकते हैं SDK

Google डेवलपर कंसोल नोटिफिकेशन गाइड लाइन्स में NotificationIconदिए गए सभी निर्देश ।

पसंदीदा सूचना चिह्न आकार 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

और अधिक जानकारी के लिए अधिसूचना आइकन आकार के लिए इस लिंक को भी देखें ।


4
यह नोटिफिकेशन के
TejaDroid

1
इसलिए मैंने यह कोशिश की है, और जब अधिसूचना अधिसूचना को नीचे खींचता हूं तो अधिसूचना आइकन में रंगीन पृष्ठभूमि होती है। लेकिन, ट्रे में ही, यह अभी भी एक सफेद आइकन है
चुपके रब्बी

1
यह समाधान सही है..एक अधिसूचना आइकन है जिसमें पारदर्शी बैक है..और सिल्हूट के द्वारा, आइकन को केवल काला नहीं होना चाहिए..इस आइकन में रंग हो सकते हैं; यह सिर्फ इतना है कि एंड्रॉइड L शो के रंग को सफेद के रूप में बदल देगा..और पिछले एंड्रॉइड संस्करणों को आइकन दिखाएगा जैसे कि
Lakshay

नीचे जोड़ने के लिए सेट लॉकर है लॉलीपॉप के लिए ic_launcher आइकन ठीक दिखा रहा है, लेकिन 6.0 में सफेद वर्ग आइकन दिखा रहा है कृपया मेरी मदद करें
हर्षा

मैंने setColorकिटकैट (एपीआई 19) और आइसक्रीमसैंडविच (एपीआई 15) पर परीक्षण किया है , दोनों ही मामलों में इसने रंग को नजरअंदाज किया लेकिन दुर्घटनाग्रस्त हो गया । तो क्या मैं ओएस संस्करण की जाँच को सुरक्षित रूप से छोड़ सकता हूँ?
मारिया

47

यह अधिसूचना आइकन प्रदर्शित करने के लिए एंड्रॉइड का उपयोग करता है कोड है:

// android_frameworks_base/packages/SystemUI/src/com/android/systemui/
//   statusbar/BaseStatusBar.java

if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
    entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
} else {
    entry.icon.setColorFilter(null);
}

तो आपको कुछ करने के लिए लक्ष्य एसडीके संस्करण सेट करना होगा <21और आइकन रंगीन रहेंगे। यह एक बदसूरत वर्कअराउंड है लेकिन यह वही करता है जो इसे करने की उम्मीद है। वैसे भी, मैं वास्तव में Google के डिज़ाइन दिशानिर्देशों का पालन करने का सुझाव देता हूं : "अधिसूचना आइकन पूरी तरह से सफेद होना चाहिए।"

यहाँ आप इसे कैसे लागू कर सकते हैं:

यदि आप अपने ऐप्स बनाने के लिए ग्रेडल / एंड्रॉइड स्टूडियो का उपयोग कर रहे हैं, तो उपयोग करें build.gradle:

defaultConfig {
    targetSdkVersion 20
}

अन्यथा (ग्रहण आदि) का उपयोग करें AndroidManifest.xml:

<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />

क्या कोई वर्कअराउंड है? या मैं उस या किसी अन्य आइकन को ठीक से दिखाने के लिए क्या कर सकता हूं?
अलेजांद्रो कैसानोवा

मैंने अपना उत्तर संपादित कर लिया है क्योंकि मुझे Android स्रोत कोड पढ़ने के बाद वर्कअराउंड मिल गया है।
बट्टूमी

4
आपकी मदद के लिए बहुत धन्यवाद, लेकिन cud you pleae मुझे कुछ "संदर्भ" प्रदान करता है। मुझे ऐसा करने की आवश्यकता कहां है? Whats "प्रविष्टि" है?
अलेजांद्रो कैसानोवा

कोड को AOSP से केवल यह दिखाने के लिए लिया गया था कि मुझे वर्कअराउंड कैसे मिला :) मैंने इसे लागू करने के तरीके पर एक छोटा सा विवरण जोड़ा है।
बट्टूमी

यह वास्तव में काम करता है। कोई भी अनुमान लगाता है कि Google ने ऐसा क्यों किया? क्या यह बग है या ये कोई विशेषता है?
m02ph3u5

24

सफेद होने के लिए अधिसूचना आइकन से बचने के लिए, उनके लिए "सिल्हूट" आइकन का उपयोग करें, अर्थात। सफेद-पर-पारदर्शी पृष्ठभूमि चित्र। आप उन्हें बनाने के लिए इरफानव्यू का उपयोग कर सकते हैं:

  • चित्र चुनें, IrfanViewचित्र उपकरण के लिए F12 दबाएँ, यदि आवश्यक हो तो चित्र साफ़ करें (अवांछित भागों, चिकनी और पॉलिश को हटा दें)
  • Image / Decrease Color Depth 2 के लिए (एक काले और सफेद तस्वीर के लिए)
  • Image / Negative (काली तस्वीर पर एक सफेद के लिए)
  • Image / Resize/Resample 144 x 144 के लिए (साइज़ मेथड "रिसाइज़" नॉट "रेम्प्लम" का उपयोग करें, अन्यथा चित्र को 24 पिक्सेल प्रति पिक्सेल 24 बिट्स तक बढ़ाया जाता है)
  • File / Save as PNG, चेक Show option dialog, चेक Save Transparent Color, क्लिक करें Save, फिर पारदर्शी रंग सेट करने के लिए छवि में काले रंग पर क्लिक करें

लगता है कि Android केवल ड्रॉबल-xxhdpi चित्र रिज़ॉल्यूशन (144 x 144) का उपयोग कर रहा है, इसलिए अपनी परिणामी ic_notification.pngफ़ाइल को कॉपी करें \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi.setSmallIcon(R.drawable.ic_notification)अपने कोड में उपयोग करें , या getNotificationIcon()ऊपर दिए गए डैनियल सैडी के रूप में उपयोग करें ।

आप रोमन नुरिक के एंड्रॉइड एसेट स्टूडियो का भी उपयोग कर सकते हैं ।


मैंने फ़ोटोशॉप का उपयोग करके अपने आइकन को बदलने की कोशिश की, लेकिन असफल रहा, लेकिन एक इरफ़ानव्यू फैन होने के नाते मैंने जल्दी से यह कोशिश की जब मैंने इसे देखा और यह आश्चर्यजनक रूप से देखा। धन्यवाद!
ब्रूस

15

एक अन्य विकल्प लॉलीपॉप और इसके बाद के संस्करण के लिए विभिन्न ग्राफिक्स की आपूर्ति करने के लिए संस्करण-विशिष्ट ड्रिबल (mipmap) निर्देशिकाओं का लाभ उठाना है।

मेरे ऐप में, "v21" निर्देशिकाओं में पारदर्शी पाठ वाले आइकन हैं जबकि अन्य निर्देशिकाओं में गैर-पारदर्शी संस्करण (लॉलीपॉप से ​​पुराने एंड्रॉइड के संस्करणों के लिए) हैं।

फाइल सिस्टम

जो कुछ इस तरह दिखना चाहिए:

Android स्टूडियो

इस तरह, आपको कोड में संस्करण संख्याओं के लिए जाँच करने की आवश्यकता नहीं है, जैसे

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_notification)
        .setContentTitle(title)
        .setContentText(message)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

इसी तरह, यदि आप "आइकन" विशेषता का उपयोग करते हैं, तो आप अपने GCM पेलोड में "ic_notification" (या जो भी आप इसे कॉल करना चुनते हैं) को संदर्भित कर सकते हैं।

https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support


3
यह काम करता है और सबसे एंड्रॉइड-वे समाधान की तरह दिखता है।
सेर्गेई गैलिन

क्या आपका कहना है कि अगर एंड्रॉइड फ़ोल्डर से आइकन को लेगा mipmap-21 अगर संस्करण लॉलीपॉप है, और यदि लॉलीपॉप से ​​कम है तो यह ड्रॉबल से ले जाएगा?
Lakshay

@ इयान, निर्देशिका दृष्टिकोण प्रति Android संस्करण के लिए संसाधन के लिए अच्छा है, लेकिन आप इस तरह से setColor(अतिरिक्त कोड को शामिल किए बिना) कैसे सेट कर सकते हैं ?
डैनियल

@ डैनियल रंग संस्करण-विशिष्ट निर्देशिकाओं में भी हो सकते हैं, उदाहरण के लिए "मान" और "मान-v21"।
इयान

12

एंड्रॉइड डिज़ाइन दिशानिर्देशों के अनुसार आपको एक सिल्हूट का उपयोग करना होगा builder.setSmallIcon(R.drawable.some_notification_icon);लेकिन यदि आप अभी भी एक रंगीन आइकन दिखाना चाहते हैं, तो यहां अधिसूचना आइकन के रूप में लॉलीपॉप और ऊपर कोड के नीचे उपयोग के लिए चाल है। लार्जआईकॉन एक प्राथमिक अधिसूचना आइकन के रूप में कार्य करेगा और आपको छोटे आईकॉन के लिए एक सिल्हूट प्रदान करने की भी आवश्यकता है क्योंकि यह लार्जकॉन के नीचे दाईं ओर दिखाया जाएगा।

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
     builder.setColor(context.getResources().getColor(R.color.red));
     builder.setSmallIcon(R.drawable.some_notification_icon);
     builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}

और प्री-लॉलीपॉप केवल .setSmallIcon(R.mipmap.ic_launcher)अपने बिल्डर के साथ उपयोग करें।


11

अब एंड्रॉइड स्टूडियो एक प्लगइन छवि एसेट प्रदान करता है , जो सभी आवश्यक ड्राबेल फ़ोल्डर में आइकन उत्पन्न करेगा

इमेज एसेट स्टूडियो आपको विभिन्न घनत्वों पर विभिन्न प्रकार के आइकन बनाने में मदद करता है और आपको दिखाता है कि उन्हें आपके प्रोजेक्ट में कहां रखा जाएगा। इसमें आपके आइकन समायोजित करने और पृष्ठभूमि जोड़ने के लिए उपकरण शामिल हैं, सभी पूर्वावलोकन फलक में परिणाम प्रदर्शित करते हैं, इसलिए वे आपके इच्छित उद्देश्य के अनुसार दिखाई देते हैं। ये उपकरण नाटकीय रूप से आइकन डिज़ाइन और आयात प्रक्रिया को कारगर बना सकते हैं।

आप इमेज एसेट पर क्लिक करके नए पर क्लिक करें> इमेज एसेट विकल्प पर क्लिक करें और यह इस तरह विंडो दिखाएगा: -

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


8

मैं एक ही मुद्दे का सामना कर रहा था और यह मेरे ऐप अधिसूचना आइकन के कारण सपाट नहीं था। एंड्रॉइड वर्जन के लिए लॉलीपॉप या उससे भी नीचे लॉलीपॉप के लिए आपका ऐप नोटिफिकेशन आइकन फ्लैट होना चाहिए, छाया के साथ आइकन का उपयोग न करें आदि।

नीचे वह कोड है जो सभी Android संस्करणों पर पूरी तरह से ठीक काम करता है।

private void sendNotification(String msg) {

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent = new Intent(this, CheckOutActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.app_name))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg).setLights(Color.GREEN, 300, 300)
            .setVibrate(new long[] { 100, 250 })
            .setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}

गलत आइकन
यहां छवि विवरण दर्ज करें

राइट आइकन

यहां छवि विवरण दर्ज करें


1
आप वास्तव में यहाँ समस्या को कहाँ से ठीक कर रहे हैं?
इगोरगानापोलस्की

राइट आइकॉन कैसे बनाये ऑनलाइन उत्पन्न करना संभव है? कोई उपकरण ??
जिक्स


7

अल्फा-चैनल उस छवि का एकमात्र डेटा है जिसे Android अधिसूचना आइकन के लिए उपयोग करता है:

  • alpha == 1: पिक्सेल सफेद दिखाते हैं
  • alpha == 0: पिक्सेल आपके द्वारा चुने गए रंग के रूप में दिखाते हैं Notification.Builder#setColor(int)

इसका उल्लेख https://developer.android.com/about/versions/android-5.0-changes.html पर किया गया है :

सिस्टम एक्शन आइकन और मुख्य सूचना आइकन में सभी गैर-अल्फा चैनलों को अनदेखा करता है। आपको यह मान लेना चाहिए कि ये आइकन केवल अल्फा होंगे।

लगभग सभी अंतर्निर्मित आरेख इसके लिए उपयुक्त अल्फ़ा चित्र प्रतीत होते हैं, इसलिए आप कुछ इस तरह का उपयोग कर सकते हैं:

Notification.Builder.setColor(Color.RED)
                    .setSmallIcon(android.R.drawable.star_on)

लेकिन मैं अभी भी एपीआई डॉक्टर की तलाश कर रहा हूं जो आधिकारिक तौर पर इसकी पुष्टि करता है।

Android 22 पर परीक्षण किया गया।


मैंने setColorकिटकैट (एपीआई 19) और आइसक्रीमसैंडविच (एपीआई 15) पर परीक्षण किया है , दोनों ही मामलों में इसने रंग को नजरअंदाज किया लेकिन दुर्घटनाग्रस्त हो गया । तो क्या मैं ओएस संस्करण की जाँच को सुरक्षित रूप से छोड़ सकता हूँ?
मारिया

@ जॉननी मुझे नहीं लगता कि यह दुर्घटनाग्रस्त हो सकता है, केवल तब बुरा लग सकता है जब आप इसे ध्यान में नहीं रखते हैं :-)
Ciro Santilli 病 I I I 法轮功

3

android:targetSdkVersion="21"मैनिफ़ेस्ट से निकालें । xml। यह काम करेगा! और इससे आपके APK में कोई संभावना नहीं है, यह सिर्फ एक चाल है जो मैंने इसे लागू किया है और मुझे अधिसूचना में रंगीन आइकन मिला है


9
सिस्टम के साथ "चाल" खेलने के लिए पूरी तरह से बुरा विचार! समाधान नहीं!
सूद 7०००

3

नीचे बताए अनुसार नोटिफिकेशन greyscale हैं। वे काले-गोरे नहीं हैं, इसके बावजूद कि दूसरों ने क्या लिखा है। आपने संभवतः नेटवर्क स्ट्रेंथ बार जैसे कई शेड्स वाले आइकन देखे हैं।

एपीआई 21 (लॉलीपॉप 5.0) से पहले, रंग आइकन काम करते हैं। आप अपने एप्लिकेशन को एपीआई 20 को लक्षित करने के लिए बाध्य कर सकते हैं, लेकिन यह आपके आवेदन के लिए उपलब्ध सुविधाओं को सीमित करता है, इसलिए यह अनुशंसित नहीं है। आप चल रहे एपीआई स्तर का परीक्षण कर सकते हैं और या तो एक रंग आइकन या एक ग्रेस्केल आइकन को उचित रूप से सेट कर सकते हैं, लेकिन यह संभवतः सार्थक नहीं है। ज्यादातर मामलों में, एक ग्रेस्केल आइकन के साथ जाना सबसे अच्छा है।

छवियों में चार चैनल हैं, RGBA (लाल / हरा / नीला / अल्फा)। अधिसूचना आइकन के लिए, Android R, G और B चैनल को अनदेखा करता है। एकमात्र चैनल जो मायने रखता है वह अल्फा है, जिसे अपारदर्शिता भी कहा जाता है। अपने आइकन को एक संपादक के साथ डिज़ाइन करें जो आपको अपने ड्राइंग रंगों के अल्फा मान पर नियंत्रण देता है।

कैसे अल्फा मान एक ग्रेस्केल छवि उत्पन्न करते हैं:

  • अल्फा = 0 (पारदर्शी) - ये पिक्सेल पारदर्शी होते हैं, जो पृष्ठभूमि का रंग दिखाते हैं।
  • अल्फा = 255 (अपारदर्शी) - ये पिक्सेल सफेद होते हैं।
  • अल्फा = 1 ... 254 - ये पिक्सल्स वही हैं जो आप उम्मीद करेंगे, जो पारदर्शी और सफेद रंग के बीच शेड्स प्रदान करेंगे।

इसे बदलना setColor:

  • पुकारते हैं NotificationCompat.Builder.setColor(int argb)। के लिए प्रलेखन से Notification.color:

    इस नोटिफिकेशन को प्रस्तुत करते समय स्टैण्डर्ड कलर (रंग में स्थिरांक की तरह एआरजीएन पूर्णांक) को मानक स्टाइल टेम्प्लेट द्वारा लागू किया जाना चाहिए। वर्तमान टेम्प्लेट डिज़ाइन इस रंग के एक क्षेत्र के ऊपर आइकन छवि (सफ़ेद रंग में सना हुआ) को ओवरले करके एक रंगीन हेडर छवि का निर्माण करता है। अल्फा घटकों की अनदेखी की जाती है।

    सेटकोलर के साथ मेरे परीक्षण से पता चलता है कि अल्फा घटकों को अनदेखा नहीं किया गया है; इसके बजाय, वे अभी भी हरियाली प्रदान करते हैं। उच्च अल्फा मान एक पिक्सेल सफेद रंग में बदल जाते हैं। निचले अल्फा मान अधिसूचना क्षेत्र में पृष्ठभूमि रंग (मेरे डिवाइस पर काला) या पुल-डाउन अधिसूचना में निर्दिष्ट रंग के लिए एक पिक्सेल चालू करते हैं। (ऐसा लगता है कि दूसरों ने थोड़ा अलग व्यवहार की सूचना दी है, इसलिए जागरूक रहें!)


2

पोस्ट एंड्रॉइड लॉलीपॉप रिलीज़ एंड्रॉइड ने अधिसूचना बार में अधिसूचना आइकन प्रदर्शित करने के लिए दिशानिर्देशों को बदल दिया है। आधिकारिक दस्तावेज कहता है "रंग शामिल करने वाली संपत्तियों को अपडेट करें या हटाएं। सिस्टम सभी गैर-अल्फा चैनलों को एक्शन आइकन और मुख्य अधिसूचना आइकन में अनदेखा करता है। आपको यह मानना ​​चाहिए कि ये आइकन अल्फा-ओनली होंगे। सिस्टम सफेद रंग में अधिसूचना आइकन बनाता है। और एक्शन आइकन डार्क ग्रे में। " अब आदमी के शब्दों का अर्थ क्या है "उस छवि के सभी भागों को रूपांतरित करें जिसे आप पारदर्शी पिक्सेल में नहीं दिखाना चाहते हैं। सभी रंग और गैर पारदर्शी पिक्सेल सफेद रंग में प्रदर्शित होते हैं "

आप इसे स्क्रीनशॉट के साथ विस्तार से यहां कैसे देख सकते हैं https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

उम्मीद है की वो मदद करदे


2

आपको एकल रंग पारदर्शी PNG छवि आयात करने की आवश्यकता है। तो आप छोटे आइकन का आइकन रंग सेट कर सकते हैं। अन्यथा इसे कुछ उपकरणों जैसे मोटो में सफेद दिखाया जाएगा


1

यदि आप GoogleFireBaseMessaging का उपयोग कर रहे हैं, तो आप "अधिसूचना" पेलोड में "आइकन आईडी" सेट कर सकते हैं (यह सफेद बार आइकन समस्या को हल करने में मेरी मदद करता है):

{
    "to":"<fb_id>",
    "priority" : "high",
    "notification" : 
    {
        "title" : "title",
        "body" : "body" ,
        "sound" : "default",
        "icon" : "ic_notification"
    }
}

R.drawable से अपनी खुद की आईडी के लिए ic_notification सेट करें।


आपने उस आइकन को कहां रखा है? मुझे जो कुछ भी मिलता है वह मेरे ऐप का आइकन है और मुझे जो भी R.drawable फाइल्स मिलती हैं, वे बाइनरी क्लास फाइल्स हैं।
shinzou

@kuhaku वह 'drawable' फोल्डर में एक ic_launcher.png फाइल की बात कर रहा है।
जॉन्सन

0

मुझे इसमें बहुत अधिक समस्या का सामना करना पड़ा, लेकिन पूरे इंटरनेट पर खोज करने के बाद मुझे इस मुद्दे के लिए अलग-अलग समाधान मिले। मुझे सभी समाधानों का सारांश दें:

नोट: यह समाधान Phonegap कॉर्डोवा उपयोगकर्ताओं के लिए है

  1. उदाहरण

<preference name="android-targetSdkVersion" value="20"/>

आपको अपना Android-targetSdkVersion मान 21 से कम पर सेट करने की आवश्यकता है। इसलिए इस मान को सेट करने के बाद अधिसूचना आइकन छवि Android 6 (Marshmallow) तक दिखाई देगी, यह Android 7 (Nougat) में काम नहीं करेगा। इस समाधान ने मेरे लिए काम किया।

  1. अपनी कॉन्फ़िग फ़ाइल में स्थित स्थिति पट्टी बदलें। उदाहरण

<preference name="StatusBarStyle" value="lightcontent" />

लेकिन यह समाधान केवल तभी काम करेगा जब आपका ऐप खोला जाएगा। इसलिए, मुझे लगता है कि यह समाधान सबसे अच्छा समाधान नहीं है, लेकिन यह कई उपयोगकर्ताओं के लिए काम करता है।

  1. अपने आइकन को पारदर्शी बनाएं। इस समाधान ने कई लोगों के लिए काम किया। वास्तव में बात यह है कि मूल निवासी के विकास में, हमें उन्हें तीन चित्र प्रदान करने की आवश्यकता है: (ए) ऐप आइकन (बी) अधिसूचना आइकन (सी) स्थिति बार आइकन छवि, लेकिन हाइब्रिड मोबाइल एप्लिकेशन विकास के मामले में कोई विकल्प नहीं है ऐसा करो। इसलिए अपने आइकन को पारदर्शी बनाएं और यह समाधान आपकी समस्या का समाधान करेगा।

और मुझे यकीन है कि उपरोक्त समाधान में से एक आपके मुद्दे के लिए काम करेगा।


0

FYI करें: यदि चिह्न दिखाई नहीं देता है, तो सुनिश्चित करें कि आपके स्थानीय या दूरस्थ सूचना कॉन्फ़िगरेशन में सही आइकन नाम है

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 

0

मुझे लगता है कि एपीआई 21 के बारे में बात करने में बहुत देर हो चुकी है, लेकिन मुझे एक आसान तरीका मिल गया है।

'कस्टम अधिसूचना (कस्टम लेआउट) का उपयोग करते समय,

RemoteView के

setImageViewResource(int viewId, int srcId);

तथा

setImageViewUri(int viewId, Uri uri); 

लॉलीपॉप (एपीआई 21) पर उन छवि को सफेद बनाता है।

लेकिन उपयोग करते समय

setImageViewBitmap(int viewId, Bitmap bitmap);

छवि सफेद नकाबपोश नहीं बन जाती है!


0

प्रलेखन के अनुसार, नोटिफिकेशन आइकन Android 3.0 (API Level 11) के बाद से सफेद होना चाहिए :

https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar

"स्टेटस बार आइकन एक पारदर्शी बैकड्रॉप पर बस सफ़ेद पिक्सेल से बने होते हैं, जहाँ चिकनी किनारों और आंतरिक बनावट के लिए अल्फा ब्लेंडिंग का उपयोग किया जाता है, जहाँ उपयुक्त हो।"


-3

इन दो चीजों को ऐप में मिलाएं

 defaultConfig {
    applicationId "com.example.abdulwahidvi.notificationproblem"
    minSdkVersion 16
    //This is the version that was added by project by default
    targetSdkVersion 26 <------ default
    // Changed it to version 20
    targetSdkVersion 20 <------ mine

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

-38

android:targetSdkVersion="20"यह होना चाहिए < 21


1
कृपया इस समाधान का पालन न करें, यह सुनिश्चित करें कि यह काम कर सकता है लेकिन Android के नए संस्करणों के लिए संगतता मोड में अपने एप्लिकेशन चलाने की कीमत पर।
King_below_my_lord 19-29
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.