El icono de la barra de notificaciones se vuelve blanco en Android 5 Lollipop

10 minutos de lectura

El icono de la barra de notificaciones se vuelve blanco
alejandro casanova

Tengo una aplicación que muestra notificaciones personalizadas. El problema es que cuando se ejecuta en Android 5, el ícono pequeño en la barra de notificaciones se muestra en blanco. ¿Cómo puedo arreglar esto?

  • Rahul Sharma y basiam tienen una mejor respuesta aquí: stackoverflow.com/questions/30795431/…

    – Rivu Chakraborty

    24 de octubre de 2016 a las 7:34

  • Me pasa cuando ejecuto Android 6, no 5.

    –Jaime Montoya

    6 de abril de 2017 a las 16:49

  • Claro, sucede con Android 5+, por supuesto, también en Android 6 y 7. En el momento de la pregunta, Android 5 era la última versión y la función que causaba este problema se introdujo en Android 5.

    –Alejandro Casanova

    06/04/2017 a las 20:20


  • Creo que es más exacto decir API Nivel 21 (Android 5.0), API Nivel 22 (Android 5.1), API Nivel 23 (Android 6.0), etc. El término “Android 5” es ambiguo porque podría estar hablando de Android 5.0 o Android 5.1, y cuando he estado probando las notificaciones y la forma en que aparecen los íconos en API Nivel 22 Vs. API Nivel 23, me he dado cuenta que se comportan diferente.

    –Jaime Montoya

    06/04/2017 a las 22:58

  • Posible duplicado de ¿Por qué los íconos configurados con Notification.Builder.setSmallIcon en Android Lollipop se muestran como un cuadrado blanco?

    – Adam Hurwitz

    9 de junio de 2019 a las 2:26

El icono de la barra de notificaciones se vuelve blanco
daniel saidi

La respuesta aceptada no es (totalmente) correcta. Claro, hace que los íconos de notificación se muestren en color, pero lo hace con un GRAN inconveniente: ¡configura el SDK de destino a un nivel inferior al de Android Lollipop!

Si resuelve su problema con el ícono blanco configurando su SDK de destino en 20, como se sugiere, su aplicación no se orientará a Android Lollipop, lo que significa que no puede usar funciones específicas de Lollipop.

Mira esto http://developer.android.com/design/style/iconography.htmly verá que el estilo blanco es cómo se deben mostrar las notificaciones en Android Lollipop.

En Lollipop, Google también sugiere que utilice un color que se mostrará detrás del icono de notificación (blanco): https://developer.android.com/about/versions/android-5.0-changes.html

Entonces, creo que una mejor solución es agregar un ícono de silueta a la aplicación y usarlo si el dispositivo ejecuta Android Lollipop.

Por ejemplo:

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

    return notification;

Y, en el método 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;
}

  • ¿Cómo se genera la silueta? Soy un desarrollador sin habilidades de Photoshop y hacer que el fondo sea transparente usando herramientas en línea aún da como resultado íconos blancos.

    – Chaitanya

    01/07/2015 a las 23:30

  • @Chaitanya Usa GIMP 🙂

    – ByteHamster

    11 de julio de 2015 a las 7:54

  • esta solución no responde a la pregunta de por qué el proceso de compilación de Android modifica un PNG perfectamente correcto y lo comprime y elimina el canal alfa.

    – philk

    18 de junio de 2016 a las 6:25

  • desarrollador.android.com/diseño/estilo/iconografía.html lleva a material.google.com/style/icons.html y cuando presiono ctrl+f y escribiendo notification en esa pagina no encuentra nada…

    – usuario25

    17 de septiembre de 2016 a las 11:19


  • en lugar de verificar desde el modificador de versión de la plataforma de aplicación de código a la carpeta dibujable – dibujable / dibujable-v21 y coloque el ícono adecuado

    – Igor

    21 de marzo de 2017 a las 15:21


1646958193 915 El icono de la barra de notificaciones se vuelve blanco
jaydipsinh zala

Totalmente de acuerdo con el usuario Daniel Saidi. Para tener Color por NotificationIcon Estoy escribiendo esta respuesta.

Para eso tienes que hacer un icono como Silhouette y hacer alguna sección Transparent donde quieras añadir tu Colors. es decir,

ingrese la descripción de la imagen aquí

Puedes agregar tu color usando

.setColor(your_color_resource_here)

NOTA : setColor solo está disponible en Lollipop así que tienes que comprobar 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)
    ...            
}

También puede lograr esto usando Lollipop como el objetivo SDK.

Todas las instrucciones sobre NotificationIcon dado en Líneas de la guía de notificación de Google Developer Console.

Tamaño de icono de notificación preferido 24x24dp

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

Y también consulte este enlace para Tamaños de los iconos de notificación para más información.

  • esta es una muy buena idea para establecer el color de fondo como notificación.setColor(su_color_recurso_aquí)

    – TejaDroid

    04/04/2015 a las 12:20

  • Así que probé esto, y el ícono de notificación tiene el fondo de color cuando bajo el tono de notificación. Pero, en la propia bandeja, sigue siendo un icono blanco.

    – Rabino sigiloso

    22 de enero de 2016 a las 17:41

  • esta solución es correcta… tenga un ícono de notificación que tenga una parte posterior transparente… y por silueta, el ícono no necesita ser solo negro… el ícono puede tener colores; es solo que Android L convertirá el color mostrado en blanco … y las versiones anteriores de Android mostrarán el ícono tal como es

    – Lakshay

    9 de junio de 2016 a las 6:54

  • estoy agregando setColor para debajo de lollipop que muestra el ícono ic_launcher bien, pero en 6.0 muestra el ícono cuadrado blanco, por favor, ayúdenme

    – Harsha

    16 de noviembre de 2016 a las 11:08

  • he probado setColor en Kitkat (API 19) y IceCreamSandwich (API 15), en ambos casos ignoraba el color pero no se estrelló. Entonces, ¿puedo omitir de manera segura verificar la versión del sistema operativo?

    – María

    8 de agosto de 2017 a las 10:19


1646958194 48 El icono de la barra de notificaciones se vuelve blanco
ByteHamster

Este es el código que usa Android para mostrar los iconos de notificación:

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

Por lo tanto, debe configurar la versión SDK de destino en algo <21 y los íconos permanecerán coloreados. Esta es una solución desagradable, pero hace lo que se espera que haga. De todos modos, realmente sugiero seguir el de Google Guía de diseño: “Los íconos de notificación deben ser completamente blancos”.

Así es como puedes implementarlo:

Si está utilizando Gradle/Android Studio para crear sus aplicaciones, utilice build.gradle:

defaultConfig {
    targetSdkVersion 20
}

De lo contrario (Eclipse, etc.) use AndroidManifest.xml:

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

  • ¿Hay algún trabajo alrededor? ¿O qué puedo hacer para mostrar ese o cualquier otro ícono correctamente?

    –Alejandro Casanova

    7 febrero 2015 a las 21:47


  • Edité mi respuesta porque encontré una solución después de leer el código fuente de Android.

    – ByteHamster

    7 febrero 2015 a las 22:14

  • Muchas gracias por su ayuda, pero por favor, bríndenme algo de “contexto”. ¿Dónde necesito hacer eso? ¿Qué es “entrada”?

    –Alejandro Casanova

    7 febrero 2015 a las 22:29


  • El código fue tomado de AOSP solo para mostrar cómo encontré la solución 🙂 He agregado una pequeña explicación sobre cómo implementarlo.

    – ByteHamster

    7 febrero 2015 a las 22:46

  • Esto realmente funciona. ¿Alguien sabe por qué Google hizo esto? ¿Es esto un error o una característica?

    – m02ph3u5

    27/02/2015 a las 13:30

1646958194 900 El icono de la barra de notificaciones se vuelve blanco
Thomas H Schmidt

Para evitar que los íconos de Notificación se vuelvan blancos, use íconos de “Silueta” para ellos, es decir. imágenes de fondo blanco sobre fondo transparente. Puedes utilizar Irfanview para construirlos:

  • elige una imagen, abre en IrfanViewpresione F12 para las herramientas de pintura, limpie la imagen si es necesario (elimine las partes no deseadas, alise y pula)
  • Image / Decrease Color Depth a 2 (para una imagen en blanco y negro)
  • Image / Negative (para una imagen en blanco sobre negro)
  • Image / Resize/Resample a 144 x 144 (utilice el método de tamaño “Redimensionar” y no “Remuestrear”, de lo contrario, la imagen aumenta a 24 bits de color por píxel (24 BPP) nuevamente
  • File / Save as PNGcontrolar Show option dialogcontrolar Save Transparent Colorhaga clic Saveluego haga clic en el color negro en la imagen para establecer el color transparente

Android parece estar usando la resolución de imagen drawable-xxhdpi (144 x 144), así que copie su resultado ic_notification.png archivo a \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi. Utilizar .setSmallIcon(R.drawable.ic_notification) en su código, o use getNotificationIcon() como Daniel Saidi sugirió anteriormente.

También puede usar Android Asset Studio de Roman Nurik.

El icono de la barra de notificaciones se vuelve blanco
ian

Otra opción es aprovechar los directorios dibujables (mipmap) específicos de la versión para proporcionar diferentes gráficos para Lollipop y superior.

En mi aplicación, los directorios “v21” contienen íconos con texto transparente, mientras que los otros directorios contienen una versión no transparente (para versiones de Android anteriores a Lollipop).

sistema de archivos

Que debería verse algo como esto:

Estudio Android

De esta manera, no necesita verificar los números de versión en el código, por ejemplo

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

Del mismo modo, puede hacer referencia a “ic_notification” (o como elija llamarlo) en su carga útil de GCM si usa el atributo “icono”.

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

  • Esto funciona y parece la solución más parecida a Android.

    – Serguéi Galin

    4 de abril de 2016 a las 10:18

  • ¿Estás diciendo que si Android elegirá el ícono de la carpeta mipmap-21 si la versión es lollipop, y si es menor que lollipop, elegirá de dibujable?

    – Lakshay

    8 de junio de 2016 a las 12:47

  • @Ian, el enfoque de directorios es bueno para los recursos según la versión de Android, pero ¿cómo puede configurar el setColor (sin involucrar código adicional) de esa manera?

    – Daniel

    28 de mayo de 2018 a las 13:59


  • Los colores de @Daniel también pueden estar en directorios específicos de la versión, por ejemplo, “valores” y “valores-v21”.

    – Ian

    29 de mayo de 2018 a las 8:30

1646958196 818 El icono de la barra de notificaciones se vuelve blanco
Nishchal Sharma

Ahora Android Studio proporciona un complemento Activo de imagenque generará un ícono en todas las carpetas de dibujo requeridas

Activo de imagen Studio lo ayuda a crear varios tipos de íconos en diferentes densidades y le muestra exactamente dónde se colocarán en su proyecto. Incluye herramientas para ajustar sus íconos y agregar fondos, todo mientras muestra el resultado en un panel de vista previa, para que aparezcan exactamente como desea. Estas herramientas pueden agilizar drásticamente el diseño de iconos y el proceso de importación.

Puedes acceder Activo de imagen haciendo clic en nuevo> haga clic en la opción Activo de imagen y se mostrará una ventana como esta: –

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

  • Esto funciona y parece la solución más parecida a Android.

    – Serguéi Galin

    4 de abril de 2016 a las 10:18

  • ¿Estás diciendo que si Android elegirá el ícono de la carpeta mipmap-21 si la versión es lollipop, y si es menor que lollipop, elegirá de dibujable?

    – Lakshay

    8 de junio de 2016 a las 12:47

  • @Ian, el enfoque de directorios es bueno para los recursos según la versión de Android, pero ¿cómo puede configurar el setColor (sin involucrar código adicional) de esa manera?

    – Daniel

    28 de mayo de 2018 a las 13:59


  • Los colores de @Daniel también pueden estar en directorios específicos de la versión, por ejemplo, “valores” y “valores-v21”.

    – Ian

    29 de mayo de 2018 a las 8:30

De acuerdo con las pautas de diseño de Android, debe usar una silueta para builder.setSmallIcon(R.drawable.some_notification_icon); Pero si aún desea mostrar un ícono colorido como ícono de notificación, aquí está el truco para piruleta y más arriba, use el código a continuación. El icono grande actuará como un icono de notificación principal y también deberá proporcionar una silueta para el icono pequeño, ya que se mostrará en la parte inferior derecha del icono grande.

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

Y solo para uso previo a la piruleta. .setSmallIcon(R.mipmap.ic_launcher) con tu constructor.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad