70 votes

Icône de notification de couleur Android

Je suis en train de travailler sur une application où je créer une notification pour l'utilisateur. Je veux l'icône pour apparaître en blanc quand il est dans la barre d'état, mais de couleur bleue lorsqu'il est affiché dans la zone de notification de menu. Voici un exemple de la même chose qui est fait par le Google app Store.

Blanc de notification dans la barre d'état:

enter image description here

Couleur de notification dans le menu déroulant:

enter image description here

Comment puis-je reproduire cela? Quelles sont les propriétés dois-je le mettre?

Edit: Voici mon code actuel - j'ai fait l'image toute blanche, avec un arrière-plan transparent, de sorte qu'il a l'air bien dans la barre d'état, mais dans la notification de chute, l'image est toujours la même couleur blanche:

private NotificationCompat.Builder getNotificationBuilder() {
        return new NotificationCompat.Builder(mainActivity)
                .setDeleteIntent(deletedPendingIntent)
                .setContentIntent(startChatPendingIntent)
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.skylight_notification)
                .setColor(ContextCompat.getColor(mainActivity, R.color.colorPrimary))
                .setContentTitle(mainActivity.getString(R.string.notification_title))
                .setContentText(mainActivity.getString(R.string.notification_prompt));
    }

43voto

Oblivionkey3 Points 630

J'ai trouvé la réponse à ma question ici: https://stackoverflow.com/a/44950197/4394594

Je ne sais pas entièrement le problème, mais en mettant l'énorme png que j'ai été à l'aide de l'icône dans le cet outil https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_skylight_notification et en plaçant le générés les icônes, il a donné dans mon mipmap dossier, j'ai été en mesure d'obtenir l' setColor(...) de la propriété pour fonctionner correctement.

40voto

radu_paun Points 433

Pour les nofitications Firebase envoyées depuis la console, il vous suffit d'ajouter ceci dans votre manifeste:

     <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/white_logo" />

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/custom_color" />
 

Où white_logo est le logo blanc de votre application et custom_color est la couleur à laquelle vous souhaitez que l'icône et le texte soient colorés.

Plus de détails ici: https://firebase.google.com/docs/cloud-messaging/android/client

25voto

JRG Points 3106

Voici ce que j'ai fait pour mon application ...

 private void showNotification(Context context) {
    Log.d(MainActivity.APP_TAG, "Displaying Notification");
    Intent activityIntent = new Intent(context, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
    mBuilder.setSmallIcon(R.drawable.ic_notification);
    mBuilder.setColor(Color.GREEN);
    mBuilder.setContentIntent(pendingIntent);
    mBuilder.setContentTitle("EarthQuakeAlert");
    mBuilder.setContentText("It's been a while you have checked out earthquake data!");
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(1, mBuilder.build());
}
 

Échantillon avec couleur:

entrez la description de l'image ici

Échantillon sans couleur: entrez la description de l'image ici

15voto

Advice-Dog Points 2101

Lors de la création de la notification, vous pouvez définir la couleur et l'icône. Si votre icône est une image d'un blanc pur , elle appliquera la couleur pour vous aux bons endroits.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    val notificationId = 10 // Some unique id.

    // Creating a channel - required for O's notifications.
    val channel = NotificationChannel("my_channel_01",
            "Channel human readable title",
            NotificationManager.IMPORTANCE_DEFAULT)

    manager.createNotificationChannel(channel)

    // Building the notification.
    val builder = Notification.Builder(context, channel.id)
    builder.setContentTitle("Warning!")
    builder.setContentText("This is a bad notification!")
    builder.setSmallIcon(R.drawable.skull)
    builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
    builder.setChannelId(channel.id)

    // Posting the notification.
    manager.notify(notificationId, builder.build())
}
 

0voto

Umar Hussain Points 2393

Vous pouvez utiliser le DrawableCompat.setTint(int drawable); du dessinable avant de définir le dessinable. Et faites mutate() le dessinable sinon la teinte de couleur sera appliquée à chaque instance de ce dessinable

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X