J'ai une application affichant des notifications personnalisées. Le problème est que lors de l'exécution sous Android 5, la petite icône dans la barre de notification est affichée en blanc. Comment puis-je réparer cela?
android
android-notifications
android-5.0-lollipop
Alejandro Casanova
la source
la source
Réponses:
La réponse acceptée n'est pas (entièrement) correcte. Bien sûr, il fait apparaître les icônes de notification en couleur, mais il le fait avec un gros inconvénient - en définissant le SDK cible sur une valeur inférieure à Android Lollipop!
Si vous résolvez votre problème d'icône blanche en définissant votre SDK cible sur 20, comme suggéré, votre application ne ciblera pas Android Lollipop, ce qui signifie que vous ne pouvez pas utiliser les fonctionnalités spécifiques à Lollipop.
Jetez un œil à http://developer.android.com/design/style/iconography.html , et vous verrez que le style blanc est la façon dont les notifications sont censées être affichées dans Android Lollipop.
Dans Lollipop, Google suggère également d'utiliser une couleur qui sera affichée derrière l'icône de notification (blanche) - https://developer.android.com/about/versions/android-5.0-changes.html
Donc, je pense qu'une meilleure solution consiste à ajouter une icône de silhouette à l'application et à l'utiliser si l'appareil exécute Android Lollipop.
Par exemple:
Et, dans la méthode getNotificationIcon:
la source
ctrl+f
et tapenotification
sur cette page, il ne trouve rien ...Entièrement d'accord avec l'utilisateur Daniel Saidi. Afin d'avoir
Color
pourNotificationIcon
j'écris cette réponse.Pour cela, vous devez créer une icône
Silhouette
et créer une sectionTransparent
où vous voulez ajouter votreColors
. c'est à dire,Vous pouvez ajouter votre couleur en utilisant
.setColor(your_color_resource_here)
REMARQUE:
setColor
n'est disponible que dansLollipop
, vous devez vérifierOSVersion
Vous pouvez également y parvenir en utilisant
Lollipop
comme cibleSDK
.Toutes les instructions relatives
NotificationIcon
donné à la console Google Developer Guide notification lignes .Taille de l'icône de notification préférée 24x24dp
Et référez-vous également à ce lien pour les tailles d'icône de notification pour plus d'informations.
la source
setColor
sur Kitkat (API 19) et IceCreamSandwich (API 15), dans les deux cas, il a ignoré la couleur mais n'a pas planté . Puis-je donc omettre de vérifier la version du système d'exploitation en toute sécurité?Voici le code qu'Android utilise pour afficher les icônes de notification:
Vous devez donc définir la version sdk cible sur quelque chose
<21
et les icônes resteront colorées. Il s'agit d'une solution de contournement laide, mais il fait ce qu'il est censé faire. Quoi qu'il en soit, je suggère vraiment de suivre les consignes de conception de Google : "Les icônes de notification doivent être entièrement blanches."Voici comment vous pouvez l'implémenter:
Si vous utilisez Gradle / Android Studio pour créer vos applications, utilisez
build.gradle
:Sinon (Eclipse etc.) utilisez
AndroidManifest.xml
:la source
Pour éviter que les icônes de notification deviennent blanches, utilisez les icônes "Silhouette" pour elles, par exemple. images d'arrière-plan blanc sur transparent. Vous pouvez utiliser Irfanview pour les construire:
IrfanView
, appuyez sur F12 pour les outils de peinture, nettoyez l'image si nécessaire (supprimez les parties indésirables, lissez et polissez)Image / Decrease Color Depth
à 2 (pour une image en noir et blanc)Image / Negative
(pour une photo blanc sur noir)Image / Resize/Resample
à 144 x 144 (utilisez la méthode de taille "Redimensionner" et non pas "Rééchantillonner", sinon l'image est à nouveau augmentée à 24 bits de couleur par pixel (24 BPP)File / Save as PNG
, vérifiezShow option dialog
, vérifiezSave Transparent Color
, cliquezSave
, puis cliquez sur la couleur noire dans l'image pour définir la couleur transparenteAndroid semble utiliser uniquement la résolution d'image drawable-xxhdpi (144 x 144), alors copiez votre
ic_notification.png
fichier résultant dans\AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi
. Utilisez.setSmallIcon(R.drawable.ic_notification)
dans votre code, ou utilisezgetNotificationIcon()
comme Daniel Saidi l'a suggéré ci-dessus.Vous pouvez également utiliser Android Asset Studio de Roman Nurik .
la source
Une autre option consiste à tirer parti des répertoires dessinables spécifiques à la version (mipmap) pour fournir différents graphiques pour Lollipop et versions ultérieures.
Dans mon application, les répertoires "v21" contiennent des icônes avec du texte transparent tandis que les autres répertoires contiennent une version non transparente (pour les versions d'Android plus anciennes que Lollipop).
Qui devrait ressembler à ceci:
De cette façon, vous n'avez pas besoin de vérifier les numéros de version dans le code, par exemple
De même, vous pouvez référencer "ic_notification" (ou tout autre nom que vous choisissez pour l'appeler) dans votre charge utile GCM si vous utilisez l'attribut "icon".
https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support
la source
setColor
(sans impliquer de code supplémentaire) de cette façon?Selon les directives de conception Android, vous devez utiliser une silhouette pour
builder.setSmallIcon(R.drawable.some_notification_icon);
Mais si vous voulez toujours afficher une icône colorée comme icône de notification, voici l'astuce pour la sucette et surtout l'utilisation ci-dessous le code. Le grandIcon agira comme une icône de notification principale et vous devez également fournir une silhouette pour smallIcon car elle sera affichée en bas à droite du grandIcon.Et pré-sucette à utiliser uniquement
.setSmallIcon(R.mipmap.ic_launcher)
avec votre constructeur.la source
Maintenant, le studio Android fournit un plugin Image Asset , qui générera une icône dans tous les dossiers Drawbale requis
Image Asset Studio vous aide à créer différents types d'icônes à différentes densités et vous montre exactement où elles seront placées dans votre projet. Il comprend des outils pour ajuster vos icônes et ajouter des fonds d'écran, tout en affichant le résultat dans un volet d'aperçu, afin qu'ils apparaissent exactement comme vous le souhaitiez. Ces outils peuvent considérablement rationaliser le processus de conception et d'importation des icônes.
Vous pouvez accéder à Image Asset en cliquant sur nouveau> cliquez sur l'option Image Asset et il affichera une fenêtre comme celle-ci: -
la source
J'étais confronté au même problème et c'était parce que l'icône de notification de mon application n'était pas plate. Pour la version Android de la sucette ou même en dessous de la sucette, l'icône de notification de votre application doit être plate, n'utilisez pas l'icône avec des ombres, etc.
Voici le code qui a parfaitement fonctionné sur toutes les versions d'Android.
Mauvaise icône
Icône de droite
la source
le canal alpha est les seules données de l'image qu'Android utilise pour les icônes de notification:
alpha == 1
: les pixels sont blancsalpha == 0
: les pixels apparaissent comme la couleur que vous avez choisieNotification.Builder#setColor(int)
Ceci est mentionné sur https://developer.android.com/about/versions/android-5.0-changes.html :
Presque tous les dessinables intégrés semblent être des images alpha appropriées pour cela, vous pouvez donc utiliser quelque chose comme:
mais je suis toujours à la recherche du document API qui le confirme officiellement.
Testé sur Android 22.
la source
setColor
sur Kitkat (API 19) et IceCreamSandwich (API 15), dans les deux cas, il a ignoré la couleur mais n'a pas planté . Alors, puis-je ignorer la version du système d'exploitation en toute sécurité?supprimez le
android:targetSdkVersion="21"
manifeste.xml. ça va marcher! et de cela il n'y a aucun problème du tout dans votre apk c'est juste un truc j'applique cela et j'ai trouvé une icône colorée dans la notificationla source
Les notifications sont en niveaux de gris comme expliqué ci-dessous. Ils ne sont pas en noir et blanc, malgré ce que d'autres ont écrit. Vous avez probablement vu des icônes avec plusieurs nuances, comme des barres de puissance réseau.
Avant API 21 (Lollipop 5.0), les icônes de couleur fonctionnent. Vous pouvez forcer votre application à cibler l'API 20, mais cela limite les fonctionnalités disponibles pour votre application, il n'est donc pas recommandé. Vous pouvez tester le niveau d'API en cours d'exécution et définir une icône de couleur ou une icône en niveaux de gris de manière appropriée, mais cela ne vaut probablement pas la peine. Dans la plupart des cas, il est préférable d'utiliser une icône en niveaux de gris.
Les images ont quatre canaux, RGBA (rouge / vert / bleu / alpha). Pour les icônes de notification, Android ignore les canaux R, G et B. Le seul canal qui compte est Alpha, également connu sous le nom d'opacité. Concevez votre icône avec un éditeur qui vous permet de contrôler la valeur alpha de vos couleurs de dessin.
Comment les valeurs Alpha génèrent une image en niveaux de gris:
Changer avec
setColor
:Appelle
NotificationCompat.Builder.setColor(int argb)
. De la documentation deNotification.color
:Mes tests avec setColor montrent que les composants Alpha ne sont pas ignorés; au lieu de cela, ils fournissent toujours des niveaux de gris. Des valeurs alpha plus élevées deviennent un pixel blanc. Des valeurs alpha inférieures transforment un pixel en couleur d'arrière-plan (noir sur mon appareil) dans la zone de notification, ou en couleur spécifiée dans la notification déroulante. (Il semble que d'autres aient signalé un comportement légèrement différent, alors soyez conscient!)
la source
Après la sortie d'Android Lollipop, Android a modifié les directives pour l'affichage des icônes de notification dans la barre de notification. La documentation officielle indique "Mettre à jour ou supprimer les actifs qui impliquent la couleur. Le système ignore tous les canaux non alpha dans les icônes d'action et dans l'icône de notification principale. Vous devez supposer que ces icônes seront uniquement en alpha. Le système dessine des icônes de notification en blanc et des icônes d'action en gris foncé. " Maintenant, cela signifie en termes profanes: "Convertissez toutes les parties de l'image que vous ne voulez pas montrer en pixels transparents. Toutes les couleurs et les pixels non transparents sont affichés en blanc "
Vous pouvez voir comment faire cela en détail avec des captures d'écran ici https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/
J'espère que cela pourra aider
la source
Vous devez importer l'image PNG transparente unicolore. Vous pouvez donc définir la couleur de l'icône de la petite icône. Sinon, il sera affiché en blanc dans certains appareils comme MOTO
la source
Si vous utilisez GoogleFireBaseMessaging, vous pouvez définir "icon id" dans la charge utile "notification" (cela m'aide à résoudre le problème d'icône de barre blanche):
définissez ic_notification sur votre propre identifiant à partir de R.drawable.
la source
J'ai également rencontré trop de problèmes dans ce domaine, mais après avoir cherché sur Internet, j'ai trouvé différentes solutions à ce problème.Je résume toutes les solutions et explique:
Remarque: Cette solution est destinée aux utilisateurs de Phonegap cordova
<preference name="android-targetSdkVersion" value="20"/>
Vous devez définir votre valeur android-targetSdkVersion à moins de 21. Ainsi, après avoir défini cette valeur, l'icône d'icône de notification apparaîtra jusqu'à Android 6 (Marshmallow), cela ne fonctionnera pas dans Android 7 (Nougat). Cette solution a fonctionné pour moi.
<preference name="StatusBarStyle" value="lightcontent" />
Mais cette solution ne fonctionnera que lorsque votre application sera ouverte. Donc, je suppose que cette solution n'est pas la meilleure, mais elle a fonctionné pour de nombreux utilisateurs.
Et je suis sûr que l'une des solutions ci-dessus fonctionnera pour votre problème.
la source
FYI: Si l'icône n'apparaît pas, assurez-vous que votre configuration de notification locale ou distante contient le nom d'icône correct, c'est-à-dire
la source
Je pense qu'il est trop tard pour parler d'API 21, mais j'ai trouvé un moyen simple.
Lorsque vous utilisez des notifications personnalisées (mise en page personnalisée),
RemoteView's
et
rend ces images blanches sur Lollipop (API 21).
Mais lors de l'utilisation
L'image ne devient pas masquée de blanc!
la source
Selon la documentation, l'icône de notification doit être blanche depuis Android 3.0 (API niveau 11) :
https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar
la source
mélanger ces deux choses dans l'application gradle
la source
android:targetSdkVersion="20"
ce devrait être <21
.la source