Tengo una aplicación que muestra notificaciones personalizadas. El problema es que cuando se ejecuta en Android 5, el pequeño icono en la barra de notificaciones se muestra en blanco. ¿Cómo puedo arreglar esto?
android
android-notifications
android-5.0-lollipop
Alejandro Casanova
fuente
fuente
Respuestas:
La respuesta aceptada no es (enteramente) correcta. Claro, hace que los iconos de notificación se muestren en color, pero lo hace con un GRAN inconveniente, ¡al establecer el SDK de destino en un nivel inferior a Android Lollipop!
Si resuelve su problema de íconos blancos configurando su SDK de destino en 20, como se sugiere, su aplicación no apuntará a Android Lollipop, lo que significa que no puede usar las funciones específicas de Lollipop.
Eche un vistazo a http://developer.android.com/design/style/iconography.html , y 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 ícono 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:
Y, en el método getNotificationIcon:
fuente
ctrl+f
y escribirnotification
en esa página no se puede encontrar nada ...Completamente de acuerdo con el usuario Daniel Saidi. Con el fin de tener
Color
deNotificationIcon
que estoy escribiendo esta respuesta.Para eso, debe hacer que el icono le guste
Silhouette
y crear una secciónTransparent
donde quiera agregar suColors
. es decir,Puedes agregar tu color usando
.setColor(your_color_resource_here)
NOTA:
setColor
solo está disponible enLollipop
modo, debe verificarOSVersion
También puede lograr esto utilizando
Lollipop
como objetivoSDK
.Todas las instrucciones relativas
NotificationIcon
a las líneas de guía de notificación de la Consola de desarrollador de Google .Tamaño de icono de notificación preferido 24x24dp
Y también consulte este enlace para ver los tamaños de los iconos de notificación para obtener más información.
fuente
setColor
en Kitkat (API 19) y IceCreamSandwich (API 15), en ambos casos ignoró el color pero no se bloqueó . Entonces, ¿puedo omitir con seguridad la comprobación de la versión del sistema operativo?Este es el código que usa Android para mostrar iconos de notificación:
Por lo tanto, debe establecer la versión de SDK de destino en algo
<21
y los iconos permanecerán coloreados. Esta es una solución fea pero hace lo que se espera que haga. De todos modos, realmente sugiero seguir las pautas de diseño de Google : "Los iconos de notificación deben ser completamente blancos".Así es como puede implementarlo:
Si está utilizando Gradle / Android Studio para crear sus aplicaciones, use
build.gradle
:De lo contrario (Eclipse, etc.) use
AndroidManifest.xml
:fuente
Para evitar que los iconos de notificación se vuelvan blancos, use los iconos "Silueta" para ellos, es decir. imágenes de fondo blanco sobre transparente. Puedes usar Irfanview para construirlos:
IrfanView
, presione 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 (use el Método de tamaño "Cambiar tamaño" no "Volver a muestrear", de lo contrario, la imagen se aumenta a 24 bits de color por píxel (24 BPP) nuevamenteFile / Save as PNG
, verifiqueShow option dialog
, verifiqueSave Transparent Color
, haga clicSave
, luego haga clic en el color negro en la imagen para establecer el color transparenteAndroid parece estar usando la resolución de imagen dibujable-xxhdpi (144 x 144) solamente, así que copie el
ic_notification.png
archivo resultante en\AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi
. Úselo.setSmallIcon(R.drawable.ic_notification)
en su código, ogetNotificationIcon()
úselo como Daniel Saidi sugirió anteriormente.También puede usar el Android Asset Studio de Roman Nurik .
fuente
Otra opción es aprovechar los directorios dibujables (mipmap) específicos de la versión para proporcionar diferentes gráficos para Lollipop y superiores.
En mi aplicación, los directorios "v21" contienen iconos con texto transparente, mientras que los otros directorios contienen versiones no transparentes (para versiones de Android anteriores a Lollipop).
Que debería verse más o menos así:
De esta manera, no necesita verificar los números de versión en el código, p. Ej.
Del mismo modo, puede hacer referencia a "ic_notification" (o como quiera llamarlo) en su carga de GCM si usa el atributo "icon".
https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support
fuente
setColor
(sin involucrar código adicional) de esa manera?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 la piruleta y el uso debajo del código siguiente. LargeIcon actuará como un icono de notificación principal y también debe proporcionar una silueta para smallIcon, ya que se mostrará en la parte inferior derecha de largeIcon.Y use pre-lollipop solo
.setSmallIcon(R.mipmap.ic_launcher)
con su constructor.fuente
Ahora Android Studio proporciona un complemento Image Asset , que generará un ícono en toda la carpeta de drawbale requerida
Image Asset Studio lo ayuda a crear varios tipos de iconos a 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 usted pretendía. Estas herramientas pueden optimizar drásticamente el proceso de diseño e importación de iconos.
Puede acceder a Image Asset haciendo clic en nuevo> haga clic en la opción Image Asset y se mostrará una ventana como esta: -
fuente
Estaba enfrentando el mismo problema y fue porque el ícono de notificación de mi aplicación no era plano. Para la versión de Android lollipop o incluso debajo de lollipop, el ícono de notificación de la aplicación debe ser plano, no use íconos con sombras, etc.
A continuación se muestra el código que funcionó perfectamente bien en todas las versiones de Android.
Icono equivocado
Icono derecho
fuente
el canal alfa es el único dato de la imagen que Android usa para los íconos de notificación:
alpha == 1
: los píxeles muestran blancoalpha == 0
: los píxeles se muestran como el color que eligió enNotification.Builder#setColor(int)
Esto se menciona en https://developer.android.com/about/versions/android-5.0-changes.html :
Casi todos los dibujos incorporados parecen ser imágenes alfa adecuadas para esto, por lo que puede usar algo como:
pero todavía estoy buscando el documento API que oficialmente lo confirma.
Probado en Android 22.
fuente
setColor
en Kitkat (API 19) y IceCreamSandwich (API 15), en ambos casos ignoró el color pero no se bloqueó . Entonces, ¿puedo omitir con seguridad la comprobación de la versión del sistema operativo?eliminar el
android:targetSdkVersion="21"
de manifest.xml. ¡funcionará! y de esto no hay ningún problema en su apk, solo es un truco, aplico esto y encontré un ícono colorido en la notificaciónfuente
Las notificaciones son en escala de grises como se explica a continuación. No son en blanco y negro, a pesar de lo que otros han escrito. Probablemente haya visto iconos con varios tonos, como barras de fuerza de red.
Antes de API 21 (Lollipop 5.0), los iconos de color funcionan. Podría obligar a su aplicación a apuntar a la API 20, pero eso limita las características disponibles para su aplicación, por lo que no se recomienda. Puede probar el nivel de API en ejecución y establecer un icono de color o un icono de escala de grises de manera adecuada, pero probablemente no valga la pena. En la mayoría de los casos, es mejor ir con un ícono en escala de grises.
Las imágenes tienen cuatro canales, RGBA (rojo / verde / azul / alfa). Para los iconos de notificación, Android ignora los canales R, G y B. El único canal que cuenta es Alpha, también conocido como opacidad. Diseñe su icono con un editor que le dé control sobre el valor Alfa de los colores de su dibujo.
Cómo los valores alfa generan una imagen en escala de grises:
Cambiándolo con
setColor
:Llamar
NotificationCompat.Builder.setColor(int argb)
. De la documentación paraNotification.color
:Mi prueba con setColor muestra que los componentes Alpha no se ignoran; en cambio, todavía proporcionan escala de grises. Los valores alfa más altos convierten un píxel en blanco. Los valores alfa más bajos convierten un píxel al color de fondo (negro en mi dispositivo) en el área de notificación, o al color especificado en la notificación desplegable. (Parece que otros han informado un comportamiento ligeramente diferente, ¡así que ten en cuenta!)
fuente
Publicar el lanzamiento de Android Lollipop Android ha cambiado las pautas para mostrar iconos de notificación en la barra de notificaciones. La documentación oficial dice "Actualice o elimine los activos que involucran color. El sistema ignora todos los canales no alfa en los íconos de acción y en el ícono de notificación principal. Debe suponer que estos íconos serán solo alfa. El sistema dibuja íconos de notificación en blanco e iconos de acción en gris oscuro ". Ahora, lo que eso significa en términos simples es "Convertir todas las partes de la imagen que no desea mostrar a píxeles transparentes. Todos los colores y píxeles no transparentes se muestran en blanco "
Puede ver cómo hacer esto en detalle con capturas de pantalla aquí https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/
Espero que ayude
fuente
Necesita importar la imagen PNG transparente de un solo color. Por lo tanto, puede establecer el color del icono del icono pequeño. De lo contrario, se mostrará en blanco en algunos dispositivos como MOTO
fuente
Si está utilizando GoogleFireBaseMessaging, puede establecer la "identificación del icono" en la carga útil de "notificación" (me ayuda a resolver el problema del icono de la barra blanca):
establezca ic_notification en su propia identificación de R.drawable.
fuente
También enfrenté demasiados problemas en esto, pero después de buscar en Internet encontré diferentes soluciones para este problema. Permítanme resumir todas las soluciones y explicar:
Nota: esta solución es para usuarios de Phonegap cordova
<preference name="android-targetSdkVersion" value="20"/>
Debe establecer su valor android-targetSdkVersion en menos de 21. Entonces, después de configurar este valor, la imagen del icono de notificación aparecerá hasta Android 6 (Marshmallow), no funcionará en Android 7 (Nougat). Esta solución funcionó para mí.
<preference name="StatusBarStyle" value="lightcontent" />
Pero esta solución solo funcionará cuando se abra su aplicación. Entonces, supongo que esta solución no es la mejor solución, pero funcionó para muchos usuarios.
Y estoy seguro de que una de las soluciones anteriores funcionará para su problema.
fuente
FYI: Si el icono no aparece, asegúrese de que su configuración de notificación local o remota contenga el nombre correcto del icono, es decir
fuente
Creo que es demasiado tarde para hablar sobre API 21, pero encontré una manera fácil.
Al usar 'Notificación personalizada (diseño personalizado)' s,
RemoteView's
y
hace que esas imágenes sean blancas en Lollipop (API 21).
Pero cuando se usa
¡La imagen no se enmascara en blanco!
fuente
De acuerdo con la documentación, el ícono de notificación debe ser blanco desde Android 3.0 (API Nivel 11) :
https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar
fuente
mezclar estas dos cosas en la aplicación gradle
fuente
android:targetSdkVersion="20"
debería ser <21
.fuente