Das Benachrichtigungsleistensymbol wird in Android 5 Lollipop weiß

207

Ich habe eine App, die benutzerdefinierte Benachrichtigungen anzeigt. Das Problem ist, dass unter Android 5 das kleine Symbol in der Benachrichtigungsleiste weiß angezeigt wird. Wie kann ich das beheben?

Alejandro Casanova
quelle
Rahul Sharma und Basiam haben hier eine bessere Antwort - stackoverflow.com/questions/30795431/…
Rivu Chakraborty
Es passiert mir, wenn ich in Android 6
Jaime Montoya
Sicher, es passiert mit Android 5+, natürlich auch mit Android 6 und 7. Zum Zeitpunkt der Frage war Android 5 die neueste Version und die Funktion, die dieses Problem verursacht, wurde in Android 5 eingeführt.
Alejandro Casanova
Ich denke, es ist genauer zu sagen, API Level 21 (Android 5.0), API Level 22 (Android 5.1), API Level 23 (Android 6.0) usw. Der Begriff "Android 5" ist mehrdeutig, weil Sie über Android 5.0 sprechen könnten oder Android 5.1, und wenn ich Benachrichtigungen und die Art und Weise, wie Symbole in API Level 22 Vs. API Level 23 habe ich festgestellt, dass sie sich unterschiedlich verhalten.
Jaime Montoya

Antworten:

269

Die akzeptierte Antwort ist nicht (vollständig) korrekt. Sicher, Benachrichtigungssymbole werden in Farbe angezeigt, aber mit einem großen Nachteil - indem Sie das Ziel-SDK auf einen niedrigeren Wert als Android Lollipop einstellen!

Wenn Sie Ihr Problem mit weißen Symbolen lösen, indem Sie Ihr Ziel-SDK wie vorgeschlagen auf 20 setzen, zielt Ihre App nicht auf Android Lollipop ab. Dies bedeutet, dass Sie keine Lollipop-spezifischen Funktionen verwenden können.

Schauen Sie sich http://developer.android.com/design/style/iconography.html an , werden Sie feststellen, dass Benachrichtigungen im weißen Stil in Android Lollipop angezeigt werden sollen.

In Lollipop schlägt Google außerdem vor, eine Farbe zu verwenden, die hinter dem (weißen) Benachrichtigungssymbol angezeigt wird. https://developer.android.com/about/versions/android-5.0-changes.html

Daher denke ich, dass eine bessere Lösung darin besteht, der App ein Silhouettensymbol hinzuzufügen und es zu verwenden, wenn auf dem Gerät Android Lollipop ausgeführt wird.

Zum Beispiel:

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

    return notification;

Und in der getNotificationIcon-Methode:

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;
}
Daniel Saidi
quelle
34
Wie erzeugt man die Silhouette? Ich bin ein Entwickler ohne Photoshop-Kenntnisse und wenn der Hintergrund mithilfe von Online-Tools transparent gemacht wird, entstehen immer noch weiße Symbole.
Chaitanya
6
@Chaitanya Verwenden Sie GIMP :)
ByteHamster
4
Diese Lösung beantwortet nicht die Frage, warum der Android-Build-Prozess ein perfekt korrektes PNG modifiziert, komprimiert und den Alpha-Kanal entfernt.
Philk
6
developer.android.com/design/style/iconography.html führt zu material.google.com/style/icons.html und wenn ich drücken ctrl+fund tippen notificationauf dieser Seite es nichts finden können ...
user25
4
Anstatt vom Versionsmodifikator der Code-Applay-Plattform zum zeichnbaren Ordner zu wechseln - drawable / drawable-v21 und das richtige Symbol zu platzieren
Igor Wojda
72

Stimmen Sie dem Benutzer Daniel Saidi voll und ganz zu. Zu haben , um Colorfür NotificationIconmich diese Antwort hier schreibe.

Dafür musst du ein Symbol wie Silhouettemachen und einen Abschnitt machenTransparent erstellen, wo immer Sie Ihre hinzufügen möchten Colors. dh

Geben Sie hier die Bildbeschreibung ein

Sie können Ihre Farbe mit hinzufügen

.setColor(your_color_resource_here)

HINWEIS: setColorist nur in verfügbar Lollipop, Sie müssen dies überprüfenOSVersion

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)
    ...            
}

Sie können dies auch mit erreichen Lollipop als Ziel erreichen SDK.

Alle Anweisungen bezüglich NotificationIcon den Benachrichtigungsleitlinien der Google Developer Console .

Bevorzugte Benachrichtigungssymbolgröße 24x24dp

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

Weitere Informationen finden Sie unter diesem Link für die Größe der Benachrichtigungssymbole .

Jaydipsinh Zala
quelle
4
Dies ist eine sehr gute Idee, um die Hintergrundfarbe als Benachrichtigung festzulegen.
setColor
1
Also habe ich es versucht und das Benachrichtigungssymbol hat den farbigen Hintergrund, wenn ich den Benachrichtigungsschatten nach unten ziehe. Aber in der Ablage selbst ist es immer noch eine weiße Ikone
Stealth Rabbi
1
Diese Lösung ist richtig. Haben Sie ein Benachrichtigungssymbol mit transparentem Rücken. Und nach Silhouette muss das Symbol nicht nur schwarz sein. Das Symbol kann Farben haben. Es ist nur so, dass das Android L die Showfarbe in Weiß konvertiert. In früheren Android-Versionen wird das Symbol so
angezeigt,
bin Zugabe setColor für unter Lutscher ic_launcher Symbol in Ordnung , aber in 6.0 zeigt weiße Quadrat Symbol Bitte helfen Sie mir zeigen
Harsha
Ich habe setColorauf Kitkat (API 19) und IceCreamSandwich (API 15) getestet. In beiden Fällen wurde die Farbe ignoriert, aber nicht abgestürzt . Kann ich die Überprüfung der Betriebssystemversion sicher unterlassen?
Maria
47

Dies ist der Code, mit dem Android Benachrichtigungssymbole anzeigt:

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

Sie müssen also die Ziel-SDK-Version auf etwas einstellen, <21und die Symbole bleiben farbig. Dies ist eine hässliche Problemumgehung, aber sie macht das, was von ihr erwartet wird. Auf jeden Fall empfehle ich wirklich, die Designrichtlinien von Google zu befolgen : "Benachrichtigungssymbole müssen vollständig weiß sein."

So können Sie es implementieren:

Wenn Sie Gradle / Android Studio zum Erstellen Ihrer Apps verwenden, verwenden Sie build.gradle:

defaultConfig {
    targetSdkVersion 20
}

Andernfalls (Eclipse usw.) verwenden Sie AndroidManifest.xml:

<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />
ByteHamster
quelle
Gibt es eine Problemumgehung? Oder was kann ich tun, um dieses oder ein anderes Symbol richtig anzuzeigen?
Alejandro Casanova
Ich habe meine Antwort bearbeitet, da ich nach dem Lesen des Android-Quellcodes eine Problemumgehung gefunden habe.
ByteHamster
4
Vielen Dank für Ihre Hilfe, aber bitte geben Sie mir einen "Kontext". Wo muss ich das machen? Was ist "Eintrag"?
Alejandro Casanova
Der Code wurde von AOSP übernommen, um zu zeigen, wie ich die Problemumgehung gefunden habe :) Ich habe eine kleine Erklärung zur Implementierung hinzugefügt.
ByteHamster
Das funktioniert tatsächlich. Irgendwelche Vermutungen, warum Google dies getan hat? Ist das ein Fehler oder eine Funktion?
m02ph3u5
24

Um zu vermeiden, dass Benachrichtigungssymbole weiß werden, verwenden Sie für sie "Silhouette" -Symbole, z. weiß-auf-transparent-Hintergrundbilder. Sie können Irfanview verwenden , um sie zu erstellen:

  • Wählen Sie ein Bild aus, öffnen Sie es IrfanView, drücken Sie F12 für die Malwerkzeuge, reinigen Sie das Bild bei Bedarf (entfernen Sie unerwünschte Teile, glätten und polieren Sie es).
  • Image / Decrease Color Depth bis 2 (für ein Schwarzweißbild)
  • Image / Negative (für ein Weiß auf Schwarz Bild)
  • Image / Resize/Resample auf 144 x 144 (verwenden Sie die Größenmethode "Größe ändern", nicht "Neu abtasten", andernfalls wird das Bild erneut auf 24 Farbbits pro Pixel (24 BPP) erhöht
  • File / Save as PNG, prüfen Show option dialog , überprüfen Save Transparent Color, klicken Saveund dann auf die schwarze Farbe im Bild klicken , um die transparente Farbe festzulegen

Android verwendet anscheinend nur die Bildauflösung drawable-xxhdpi (144 x 144). Kopieren Sie also das Ergebnis ic_notification.png Datei in \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi. Verwenden Sie es .setSmallIcon(R.drawable.ic_notification)in Ihrem Code oder getNotificationIcon()wie oben von Daniel Saidi vorgeschlagen.

Sie können auch das Android Asset Studio von Roman Nurik verwenden .

Thomas H. Schmidt
quelle
Ich habe versucht, mein Symbol mit Photoshop zu konvertieren, bin aber gescheitert, aber als irfanview-Fan habe ich es schnell versucht, als ich es sah, und es hat wunderbar funktioniert. Vielen Dank!
Bruce
15

Eine weitere Option besteht darin, die versionenspezifischen Drawable-Verzeichnisse (Mipmap-Verzeichnisse) zu nutzen, um verschiedene Grafiken für Lollipop und höher bereitzustellen.

In meiner App enthalten die "v21" -Verzeichnisse Symbole mit transparentem Text, während die anderen Verzeichnisse eine nicht transparente Version enthalten (für Versionen von Android, die älter als Lollipop sind).

Dateisystem

Welches sollte ungefähr so ​​aussehen:

Android Studio

Auf diese Weise müssen Sie nicht nach Versionsnummern im Code suchen, z

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

Ebenso können Sie in Ihrer GCM-Nutzlast auf "ic_notification" (oder wie auch immer Sie es nennen) verweisen, wenn Sie das Attribut "icon" verwenden.

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

Ian
quelle
3
Dies funktioniert und sieht aus wie die Android-Lösung.
Sergey Galin
Wollen Sie damit sagen, dass wenn Android das Symbol aus dem Ordner mipmap-21 auswählt, wenn die Version lollipop ist, und wenn es kleiner als lollipop ist, wird es aus dem Drawable ausgewählt?
Lakshay
@ Ian, der Verzeichnisansatz ist gut für Ressourcen pro Android-Version, aber wie können Sie das setColor(ohne zusätzlichen Code) auf diese Weise einstellen ?
Daniel
@ Daniel-Farben können sich auch in versionenspezifischen Verzeichnissen befinden, z. B. "values" und "values-v21".
Ian
12

Gemäß den Android-Designrichtlinien müssen Sie eine Silhouette für verwenden. builder.setSmallIcon(R.drawable.some_notification_icon);Wenn Sie jedoch weiterhin ein farbenfrohes Symbol als Benachrichtigungssymbol anzeigen möchten, ist dies der Trick für Lollipop und höher. Verwenden Sie den folgenden Code. Das largeIcon fungiert als primäres Benachrichtigungssymbol, und Sie müssen auch eine Silhouette für smallIcon angeben, die unten rechts auf dem largeIcon angezeigt wird.

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

Und Pre-Lollipop nur .setSmallIcon(R.mipmap.ic_launcher)mit Ihrem Builder verwenden.

Muhammad Babar
quelle
11

Jetzt bietet Android Studio ein Plugin Image Asset an , das ein Symbol in allen erforderlichen Drawbale-Ordnern generiert

Mit Image Asset Studio können Sie verschiedene Arten von Symbolen mit unterschiedlichen Dichten erstellen und genau anzeigen, wo sie in Ihrem Projekt platziert werden. Es enthält Tools zum Anpassen Ihrer Symbole und zum Hinzufügen von Hintergründen, während das Ergebnis in einem Vorschaufenster angezeigt wird, sodass sie genau so angezeigt werden, wie Sie es beabsichtigt haben. Diese Tools können das Design und den Import von Symbolen erheblich optimieren.

Sie können auf Image Asset zugreifen, indem Sie auf Neu klicken> auf die Option Image Asset klicken. Das folgende Fenster wird angezeigt: -

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Nishchal
quelle
8

Ich hatte das gleiche Problem und es lag daran, dass mein App-Benachrichtigungssymbol nicht flach war. Für Android-Version Lollipop oder sogar unter Lollipop sollte Ihr App-Benachrichtigungssymbol flach sein, verwenden Sie kein Symbol mit Schatten usw.

Unten ist der Code, der auf allen Android-Versionen einwandfrei funktioniert hat.

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

Falsches Symbol
Geben Sie hier die Bildbeschreibung ein

Richtiges Symbol

Geben Sie hier die Bildbeschreibung ein

Nauman Zubair
quelle
1
Wo genau beheben Sie das Problem hier?
IgorGanapolsky
So erstellen Sie das richtige Symbol. Ist es möglich online zu generieren? irgendein Werkzeug?
Jiks
@ Jiks Ja, hier ist Link
Muhammad Sohaib Ayub
7

Alpha-Kanal sind die einzigen Daten des Bildes, die Android für Benachrichtigungssymbole verwendet:

  • alpha == 1: Pixel zeigen Weiß
  • alpha == 0: Pixel werden als die Farbe angezeigt, die Sie ausgewählt haben Notification.Builder#setColor(int)

Dies wird unter https://developer.android.com/about/versions/android-5.0-changes.html erwähnt :

Das System ignoriert alle Nicht-Alpha-Kanäle in Aktionssymbolen und im Hauptbenachrichtigungssymbol. Sie sollten davon ausgehen, dass diese Symbole nur Alpha-Symbole sind.

Fast alle eingebauten Drawables scheinen dafür geeignete Alpha-Bilder zu sein, daher können Sie Folgendes verwenden:

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

Aber ich suche immer noch nach dem API-Dokument , das dies offiziell bestätigt.

Getestet auf Android 22.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
Ich habe setColorauf Kitkat (API 19) und IceCreamSandwich (API 15) getestet. In beiden Fällen wurde die Farbe ignoriert, aber nicht abgestürzt . Kann ich die Überprüfung der Betriebssystemversion sicher unterlassen?
Maria
@ JohnLee Ich glaube nicht, dass es abstürzen kann, kann nur schlecht aussehen, wenn Sie es nicht berücksichtigen :-)
Ciro Santilli 8 冠状 病 六四 事件 法轮功
3

Entfernen Sie die Datei android:targetSdkVersion="21"aus manifest.xml. es wird klappen! und von diesem gibt es überhaupt kein Problem in Ihrer apk es ist nur ein Trick, den ich anwende und ich fand buntes Symbol in der Benachrichtigung

Bhanu Sharma
quelle
9
Völlig schlechte Idee, mit dem System "Streiche" zu spielen! Keine Lösung!
Sud007
3

Benachrichtigungen sind Graustufen wie unten erläutert. Sie sind nicht schwarz-weiß, trotz dessen, was andere geschrieben haben. Sie haben wahrscheinlich Symbole mit mehreren Schattierungen gesehen, z. B. Balken für die Netzwerkstärke.

Vor API 21 (Lollipop 5.0) funktionieren Farbsymbole. Sie können Ihre Anwendung auf die Ziel-API 20 zwingen, dies schränkt jedoch die für Ihre Anwendung verfügbaren Funktionen ein, sodass dies nicht empfohlen wird. Sie können die laufende API-Ebene testen und entweder ein Farbsymbol oder ein Graustufensymbol entsprechend festlegen. Dies ist jedoch wahrscheinlich nicht sinnvoll. In den meisten Fällen ist es am besten, ein Graustufensymbol zu verwenden.

Bilder haben vier Kanäle, RGBA (rot / grün / blau / alpha). Bei Benachrichtigungssymbolen ignoriert Android die Kanäle R, G und B. Der einzige Kanal, der zählt, ist Alpha, auch als Deckkraft bekannt. Entwerfen Sie Ihr Symbol mit einem Editor, mit dem Sie den Alpha-Wert Ihrer Zeichnungsfarben steuern können.

Wie Alpha-Werte ein Graustufenbild erzeugen:

  • Alpha = 0 (transparent) - Diese Pixel sind transparent und zeigen die Hintergrundfarbe.
  • Alpha = 255 (undurchsichtig) - Diese Pixel sind weiß.
  • Alpha = 1 ... 254 - Diese Pixel sind genau das, was Sie erwarten würden, und bieten die Schattierungen zwischen transparent und weiß.

Ändern mit setColor:

  • Rufen Sie an NotificationCompat.Builder.setColor(int argb). Aus der Dokumentation für Notification.color:

    Akzentfarbe (eine ARGB-Ganzzahl wie die Konstanten in Farbe), die von den Standardstilvorlagen angewendet wird, wenn diese Benachrichtigung angezeigt wird. Das aktuelle Vorlagendesign erstellt ein farbenfrohes Header-Bild, indem das Symbolbild (weiß schabloniert) auf ein Feld dieser Farbe gelegt wird. Alpha-Komponenten werden ignoriert.

    Meine Tests mit setColor zeigen, dass Alpha-Komponenten nicht ignoriert werden. Stattdessen bieten sie immer noch Graustufen. Höhere Alpha-Werte färben ein Pixel weiß. Niedrigere Alpha-Werte ändern ein Pixel in die Hintergrundfarbe (auf meinem Gerät schwarz) im Benachrichtigungsbereich oder in die angegebene Farbe in der Pulldown-Benachrichtigung. (Es scheint, dass andere etwas anderes Verhalten gemeldet haben, seien Sie sich also bewusst!)

Jeremy Frank
quelle
2

Post android Lollipop Release Android hat die Richtlinien für die Anzeige von Benachrichtigungssymbolen in der Benachrichtigungsleiste geändert. In der offiziellen Dokumentation heißt es: "Aktualisieren oder Entfernen von Elementen, die Farbe enthalten. Das System ignoriert alle Nicht-Alpha-Kanäle in Aktionssymbolen und im Hauptbenachrichtigungssymbol. Sie sollten davon ausgehen, dass diese Symbole nur Alpha-Symbole sind. Das System zeichnet Benachrichtigungssymbole in Weiß und Aktionssymbole in Dunkelgrau. “ Für Laien bedeutet dies nun: "Konvertieren Sie alle Teile des Bildes, die Sie nicht anzeigen möchten, in transparente Pixel. Alle Farben und nicht transparenten Pixel werden in Weiß angezeigt. "

Wie das geht, erfahren Sie im Detail anhand von Screenshots hier https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

hoffentlich hilft das

Rohit Khanna
quelle
2

Sie müssen das einfarbige transparente PNG-Bild importieren. So können Sie die Symbolfarbe des kleinen Symbols einstellen. Andernfalls wird es bei einigen Geräten wie MOTO weiß angezeigt

abhi.nalavade
quelle
1

Wenn Sie GoogleFireBaseMessaging verwenden, können Sie "Symbol-ID" in der Nutzlast "Benachrichtigung" festlegen (dies hilft mir, das Problem mit dem weißen Balkensymbol zu lösen):

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

Setzen Sie ic_notification von R.drawable auf Ihre eigene ID.

Maxim Firsoff
quelle
Wo hast du das Symbol platziert? Alles, was ich bekomme, ist das Symbol meiner App und alle R.drawable-Dateien, die ich finde, sind Binärklassendateien.
Shinzou
@kuhaku bezieht er sich auf eine ic_launcher.png-Datei im Ordner 'drawable'.
Johnson
0

Ich hatte auch zu viele Probleme, aber nachdem ich im Internet gesucht hatte, fand ich verschiedene Lösungen für dieses Problem. Lassen Sie mich alle Lösungen zusammenfassen und erklären:

Hinweis: Diese Lösung ist für Benutzer von Phonegap Cordova gedacht

  1. Beispiel

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

Sie müssen Ihren android-targetSdkVersion-Wert auf weniger als 21 einstellen. Nachdem Sie diesen Wert festgelegt haben, wird das Benachrichtigungssymbolbild bis Android 6 (Marshmallow) angezeigt. In Android 7 (Nougat) funktioniert es nicht. Diese Lösung hat bei mir funktioniert.

  1. Ändern Sie den statusbarStyle in Ihrer Konfigurationsdatei. Beispiel

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

Diese Lösung funktioniert jedoch nur, wenn Ihre App geöffnet wird. Ich denke, diese Lösung ist nicht die beste Lösung, aber sie hat für viele Benutzer funktioniert.

  1. Machen Sie Ihr Symbol transparent. Diese Lösung hat bei vielen Menschen funktioniert. Tatsächlich müssen wir bei der Entwicklung der nativen Anwendung drei Bilder bereitstellen: (a) App-Symbol (b) Benachrichtigungssymbol (c) Symbol in der Statusleiste, bei der Entwicklung von Hybrid-Mobilanwendungen gibt es jedoch keine Option dazu tun Sie dies. Machen Sie Ihr Symbol transparent und diese Lösung löst Ihr Problem.

Und ich bin sicher, dass eine der oben genannten Lösungen für Ihr Problem geeignet ist.

Rinku Kumar
quelle
0

Zu Ihrer Information: Wenn das Symbol nicht angezeigt wird, stellen Sie sicher, dass Ihre lokale oder Remote-Benachrichtigungskonfiguration den richtigen Symbolnamen enthält, d. H.

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 
phil
quelle
0

Ich denke, es ist zu spät, um über API 21 zu sprechen, aber ich habe einen einfachen Weg gefunden.

Bei Verwendung von "Benutzerdefinierte Benachrichtigung (benutzerdefiniertes Layout)"

RemoteView's

setImageViewResource(int viewId, int srcId);

und

setImageViewUri(int viewId, Uri uri); 

macht diese Bilder auf Lollipop (API 21) weiß.

Aber bei der Verwendung

setImageViewBitmap(int viewId, Bitmap bitmap);

Das Bild wird nicht weiß maskiert!

Kuchen Limette
quelle
0

Laut Dokumentation muss das Benachrichtigungssymbol seit Android 3.0 (API Level 11) weiß sein :

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

"Statusleistensymbole bestehen einfach aus weißen Pixeln auf einem transparenten Hintergrund, wobei die Alpha-Mischung gegebenenfalls für glatte Kanten und interne Texturen verwendet wird."

Laurent
quelle
-3

Mischen Sie diese beiden Dinge in App Gradle

 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"
}
Wahid
quelle
-38

android:targetSdkVersion="20"es sollte <sein 21.

Hemanth Dvshkk
quelle
1
Befolgen Sie diese Lösung nicht, da sie möglicherweise funktioniert, sondern auf Kosten der Ausführung Ihrer Apps im Kompatibilitätsmodus für die neueren Versionen von Android.
king_below_my_lord