добавьте новую строку в Андроид уведомления
Мне нужно вставить новую строку в уведомление. У меня есть две строки данных, которые отличаются, и мне нужно вставить новую строку, чтобы различать их. Я проверил обратную косую черту-n, но это не работает.
есть ли способ сделать это?
3 ответов
насколько я знаю, нет другого способа сделать это, кроме создания пользовательского Notification
макет. The Notification
документация имеет пошаговый процесс выполнения этого и довольно тщательный. вот ссылка на это.
создание двух строк, как вы требуете, просто означало бы введение дополнительного TextView
в XML макета. Тогда вы просто установите each TextView
текст к вашим двум строкам данных,как показано в Примере.
вам нужно сделать пользовательский конструктор уведомлений в вашем приложении. более подробно здесь : https://developer.android.com/guide/topics/ui/notifiers/notifications.html#CustomExpandedView, мне требуется так много времени, чтобы узнать, как сделать firebase для вызова onMessageReceived во всех случаях.
- приложение на переднем плане
- приложение в фоновом режиме
- приложение было убито.
в основном ваше сообщение firebase через api не должно иметь "уведомления "введите свой запрос json на сервер firebase и используйте только"сведения" ключ как показано ниже, служба firebase вызовет ваш onMessageReceived во всех случаях, перечисленных выше.
{
"to": "/topics/your_topic",
"data": {
"key1":"data_key1",
"title":"",
"line1":"data1",
"line2":"data2"
}
}
вам не нужно использовать RemoteViews или пользовательский макет, чтобы показать несколько строк, несмотря на то, что другие сказали здесь! Многострочные тексты возможны, но только при расширении уведомления.
для этого вы можете использовать NotificationCompat.BigTextStyle. И если Вы читаете руководства dev здесь тогда вы заметите, что они отмечают этот совет:
Совет: Чтобы добавить форматирование текста (полужирный, курсив, разрывы строк и т. д.), Вы можете добавить стиль с разметкой HTML.
другими словами:
val title = "My Title"
val body = "Line 1<br>Line 2<br><i>Italic Line 3</i>"
val formattedBody = SpannableString(
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) Html.fromHtml(body)
else Html.fromHtml(body, Html.FROM_HTML_MODE_LEGACY)
)
NotificationCompat.Builder(context, channelId)
.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
.setContentTitle(title)
.setContentText(formattedBody)
.setStyle(NotificationCompat.BigTextStyle().bigText(formattedBody).setBigContentTitle(title))
.setSmallIcon(R.drawable.ic_small_notification_icon)
.build()
вещи, чтобы отметить, как это работает:
- название может иметь нет форматирование (т. е. не пытайтесь использовать HTML здесь)
- тело может иметь столько форматирования, сколько мы хотим, но мы должны отметить, что разрывы строк не будут отображаться, когда уведомление свернуто. Все остальные HTML-форматирование отлично работает в обоих свернутых / развернутых состояниях. Вы можете выделить жирным шрифтом, курсивом и т. д. столько, сколько вы хотите (я думаю)
Если вы не хотите отправлять форматирование HTML в своем push-уведомлении, то другой вариант-использовать форматирование markdown и вручную обрабатывать это перед созданием уведомлений с помощью SpannableStringBuilder