Значок уведомления о значке Android
Я работаю над приложением, в котором я создаю уведомление для пользователя. Я хочу, чтобы значок отображался белым цветом в строке состояния, но синим цветом, когда он отображается в раскрывающемся меню уведомлений. Вот пример того же, что и приложение Google Store.
Белое уведомление в строке состояния:
![enter image description here]()
Цветное уведомление в выпадающем меню:
![enter image description here]()
Как я могу повторить это? Какие свойства мне нужно установить?
Изменить:
Вот мой текущий код - я сделал изображение полностью белым с прозрачным фоном, поэтому оно выглядит хорошо в строке состояния, но в выпадающем списке уведомлений изображение остается того же белого цвета:
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));
}
Ответы
Ответ 1
Я нашел ответ на мой вопрос здесь: fooobar.com/questions/1248475/...
Я не знаю, в чем проблема, но, поставив огромный png, который я использовал для значка в этом инструменте https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_skylight_notification
и, поместив сгенерированные значки в папку mipmap, я смог получить свойство setColor(...)
для правильной работы.
Ответ 2
Для уведомлений от firebase, отправленных с консоли, вам просто нужно добавить это в свой манифест:
<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" />
Где white_logo - это белый логотип вашего приложения, а custom_color - это цвет, для которого вы хотите, чтобы значок и текст были окрашены.
Подробнее здесь: https://firebase.google.com/docs/cloud-messaging/android/client
Ответ 3
Вот что я сделал для своего приложения...
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 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());
}
Образец с цветом:
![enter image description here]()
Образец без цвета:
![enter image description here]()
Ответ 4
При создании уведомления вы можете установить цвет и значок. Если ваш значок является чисто белым изображением, он применит цвет для вас в правильных местах.
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 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())
}
Ответ 5
Вы можете использовать DrawableCompat.setTint(int drawable);
для рисования перед установкой выталкиваемого.
И сделайте mutate()
для рисования, иначе оттенок цвета будет применен к каждому экземпляру этого доступного
Ответ 6
Если вы хотите изменить цвет и название в соответствии с Gmail и Twitter в Push-уведомлении или встроенном уведомлении, вам нужно добавить эти строки в уведомление.
builder.setSmallIcon(R.drawable.skull)
builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
Первая строка используется для значка, а во второй строке необходимо определить цвет