Обычно базовое уведомление включает заголовок, строку текста и действия, которые пользователь может выполнить в ответ. Для предоставления более подробной информации можно создавать большие, расширяемые уведомления, используя один из нескольких шаблонов уведомлений, описанных в этом документе.
Для начала создайте уведомление со всем основным содержимым, как описано в разделе «Создание уведомления» . Затем вызовите setStyle() с объектом стиля и укажите информацию, соответствующую каждому шаблону, как показано в следующих примерах.
Добавить большое изображение
Чтобы добавить изображение в уведомление, передайте экземпляр NotificationCompat.BigPictureStyle в setStyle() .
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setStyle(NotificationCompat.BigPictureStyle()
.bigPicture(myBitmap))
.build()
Чтобы изображение отображалось в виде миниатюры только в свернутом состоянии уведомления, как показано на следующем рисунке, вызовите setLargeIcon() и передайте ему изображение. Затем вызовите BigPictureStyle.bigLargeIcon() и передайте ему null , чтобы большая иконка исчезла при разворачивании уведомления:
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setLargeIcon(myBitmap)
.setStyle(NotificationCompat.BigPictureStyle()
.bigPicture(myBitmap)
.bigLargeIcon(null))
.build()

NotificationCompat.BigPictureStyle .Добавьте большой блок текста
Примените NotificationCompat.BigTextStyle для отображения текста в развернутой области содержимого уведомления:
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.new_mail)
.setContentTitle(emailObject.getSenderName())
.setContentText(emailObject.getSubject())
.setLargeIcon(emailObject.getSenderAvatar())
.setStyle(NotificationCompat.BigTextStyle()
.bigText(emailObject.getSubjectAndSnippet()))
.build()

NotificationCompat.BigTextStyle .Создайте уведомление в стиле "Входящие".
Примените NotificationCompat.InboxStyle к уведомлению, если хотите добавить несколько коротких строк с кратким содержанием, например, фрагменты входящих писем. Это позволит добавить несколько фрагментов текста, каждый из которых будет обрезан до одной строки, вместо одной сплошной строки текста, предоставляемой NotificationCompat.BigTextStyle .
Чтобы добавить новую строку, вызовите функцию addLine() до шести раз, как показано в следующем примере. Если вы добавите более шести строк, будут видны только первые шесть.
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.baseline_email_24)
.setContentTitle("5 New mails from Frank")
.setContentText("Check them out")
.setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.logo))
.setStyle(
NotificationCompat.InboxStyle()
.addLine("Re: Planning")
.addLine("Delivery on its way")
.addLine("Follow-up")
)
.build()
В результате получается следующее изображение:

Отобразить диалог в уведомлении
Примените NotificationCompat.MessagingStyle для отображения последовательных сообщений от любого количества отправителей. Это идеально подходит для мессенджеров, поскольку обеспечивает единообразный макет для каждого сообщения, обрабатывая имя отправителя и текст сообщения отдельно, и каждое сообщение может состоять из нескольких строк.
Чтобы добавить новое сообщение, вызовите addMessage() , передав текст сообщения, время получения и имя отправителя. Вы также можете передать эту информацию в виде объекта NotificationCompat.MessagingStyle.Message , как показано в следующем примере:
val message1 = NotificationCompat.MessagingStyle.Message(
messages[0].getText(),
messages[0].getTime(),
messages[0].getSender())
val message2 = NotificationCompat.MessagingStyle.Message(
messages[1].getText(),
messages[1].getTime(),
messages[1].getSender())
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.new_message)
.setStyle(
NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
.addMessage(message1)
.addMessage(message2))
.build()

NotificationCompat.MessagingStyle . При использовании NotificationCompat.MessagingStyle любые значения, переданные в методы setContentTitle() и setContentText() игнорируются.
Вы можете вызвать setConversationTitle() , чтобы добавить заголовок, который будет отображаться над беседой. Это может быть созданное пользователем название группы или, если у группы нет конкретного названия, список участников беседы. Не следует устанавливать заголовок для чатов один на один, поскольку система использует наличие этого поля как подсказку о том, что беседа является групповой.
Этот стиль применяется только на устройствах под управлением Android 7.0 (уровень API 24) и более поздних версий. При использовании библиотеки совместимости ( NotificationCompat ), как было показано ранее, уведомления с MessagingStyle автоматически переключаются на поддерживаемый расширенный стиль уведомлений.
При создании подобного уведомления для чата добавьте действие прямого ответа .
Создайте уведомление с элементами управления воспроизведением мультимедиа.
Примените MediaStyleNotificationHelper.MediaStyle для отображения элементов управления воспроизведением мультимедиа и информации о треке.
Укажите связанный с вами MediaSession в конструкторе. Это позволит Android отображать правильную информацию о ваших медиафайлах.
Вызовите addAction() до пяти раз, чтобы отобразить до пяти кнопок с иконками. Вызовите setLargeIcon() , чтобы установить обложку альбома.
В отличие от других стилей уведомлений, MediaStyle также позволяет изменять размер содержимого в свернутом виде, указывая три кнопки действий, которые также отображаются в свернутом виде. Для этого укажите индексы кнопок действий в setShowActionsInCompactView() .
В следующем примере показано, как создать уведомление с элементами управления мультимедиа:
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
// Show controls on lock screen even when user hides sensitive content.
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_stat_player)
// Add media control buttons that invoke intents in your media service
.addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
.addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
.addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
// Apply the media style template.
.setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
.setShowActionsInCompactView(1 /* #1: pause button \*/))
.setContentTitle("Wonderful music")
.setContentText("My Awesome Band")
.setLargeIcon(albumArtBitmap)
.build()

MediaStyleNotificationHelper.MediaStyle .Дополнительные ресурсы
Для получения дополнительной информации о MediaStyle и расширяемых уведомлениях см. следующие ссылки.