tema quitar pantalla oscuro oreo notificaciones negra iconos estrella como color celular cambiar barra android notifications android-notifications android-5.0-lollipop

quitar - iconos barra de notificaciones android



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

Ahora Android Studio proporciona un complemento Image Asset , que generará un ícono en toda la carpeta de drawbale requerida

Image Asset Studio le ayuda a crear varios tipos de iconos con 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: -

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


Completamente de acuerdo con el usuario Daniel Saidi. Para tener Color para NotificationIcon , estoy escribiendo esta respuesta.

Para eso, debe hacer un icono como Silhouette y hacer una sección Transparent donde quiera agregar sus Colors . es decir,

Puedes agregar tu color usando

.setColor(your_color_resource_here)

NOTA: setColor solo está disponible en Lollipop , por lo que debe verificar 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 SDK destino.

Todas las instrucciones sobre NotificationIcon dan en las Líneas de guía de notificaciones de la Consola de desarrollador de Google

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 ver los tamaños de los iconos de notificación para obtener más información.


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

setImageViewResource(int viewId, int srcId);

y

setImageViewUri(int viewId, Uri uri);

hace que esas imágenes sean blancas en Lollipop (API 21).

Pero cuando se usa

setImageViewBitmap(int viewId, Bitmap bitmap);

¡La imagen no se enmascara en blanco!



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 ícono de notificación principal y también debe proporcionar una silueta para smallIcon, ya que se mostrará en la parte inferior derecha de largeIcon.

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 pre-lollipop usa solo .setSmallIcon(R.mipmap.ic_launcher) con su constructor.


Estaba enfrentando el mismo problema y fue porque el icono 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.

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

Icono equivocado

Icono derecho


Este es el código que usa Android para mostrar 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 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 http://developer.android.com/design/style/iconography.html de Google: "Los iconos de notificación deben ser completamente blancos".

Así es como puede implementarlo:

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

defaultConfig { targetSdkVersion 20 }

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

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


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

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


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


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. Puede 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 adecuadamente, pero esto 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 íconos 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 sus colores de dibujo.

Cómo los valores alfa generan una imagen en escala de grises:

  • Alfa = 0 (transparente): estos píxeles son transparentes y muestran el color de fondo.
  • Alfa = 255 (opaco): estos píxeles son blancos.
  • Alfa = 1 ... 254: estos píxeles son exactamente lo que esperarías, proporcionando los tonos entre transparente y blanco.

Cambiándolo con setColor :

  • Llame a NotificationCompat.Builder.setColor(int argb) . De la documentación para Notification.color :

    Color de acento (un entero ARGB como las constantes en color) que las plantillas de estilo estándar deben aplicar al presentar esta notificación. El diseño actual de la plantilla construye una imagen de encabezado colorida superponiendo la imagen del icono (estampada en blanco) sobre un campo de este color. Los componentes alfa se ignoran.

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


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


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 una versión no transparente (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.

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 quiera llamarlo) en su carga de GCM si usa el atributo "icon".

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


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:

  • elija una imagen, abra en 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 incrementa a 24 bits de color por píxel (24 BPP) nuevamente
  • File / Save as PNG , marque el Show option dialog , marque Save Transparent Color , haga clic en Save , luego haga clic en el color negro en la imagen para establecer el color transparente

Parece que Android usa la resolución de imagen drawable-xxhdpi (144 x 144) solamente, así que copie el archivo ic_notification.png resultante en /AndroidStudio/Projects/.../app/src/main/res/drawable-xxhdpi . Use .setSmallIcon(R.drawable.ic_notification) en su código, o use getNotificationIcon() como Daniel Saidi sugirió anteriormente.

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


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 "Actualizar o eliminar 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 asumir 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


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

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

establezca ic_notification en su propia identificación de R.drawable.


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

  1. Example

<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í.

  1. Cambia el statusbarStyle en tu archivo de configuración. Example

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

  1. Haz que tu ícono sea transparente. Esta solución funcionó para muchas personas. En realidad, en el desarrollo de la aplicación nativa, debemos proporcionarles tres imágenes: (a) Icono de la aplicación (b) Icono de notificación (c) Imagen del icono de la barra de estado, pero en el caso del desarrollo de aplicaciones móviles híbridas no hay opción para hazlo Así que haga que su icono sea transparente y esta solución resolverá su problema.

Y estoy seguro de que una de las soluciones anteriores funcionará para su problema.


elimine 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ón


mezclar estas dos cosas en la aplicación 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" }


android:targetSdkVersion="20" debería ser < 21 .


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 blanco
  • alpha == 0 : los píxeles se muestran como el color que eligió en Notification.Builder#setColor(int)

Esto se menciona en https://developer.android.com/about/versions/android-5.0-changes.html :

El sistema ignora todos los canales no alfa en los iconos de acción y en el icono de notificación principal. Debe suponer que estos iconos serán solo alfa.

Casi todos los dibujos incorporados parecen ser imágenes alfa adecuadas para esto, por lo que puede usar algo como:

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

pero todavía estoy buscando el documento API que oficialmente lo confirma.

Probado en Android 22.