Android Уведомление Действие Раскрывающийся список RadioButton

Я видел уведомление андроида с действием Snooze. Если вы нажали на кнопку повтора, уведомление расширилось, и вы смогли выбрать время (например, 1 час /3 часа /1 день...), которое должно пройти до следующего уведомления из раскрывающегося списка.

Кто-нибудь знает, как это реализовать?

0 ответов

Функция расширения предоставляется системой Android для различных стилей уведомлений. Вам нужно представление, которое отображает список опций, которые пользователь может выбрать. Так что вам нужно создать пользовательский вид и заполнить его вашими опциями.

Вы можете установить пользовательский вид, используя Notification.DecoratedCustomViewStyle() Предоставляется системой уведомлений Android.

Если вы хотите, чтобы в свернутом и развернутом виде отображались разные виды, используйте следующие методы для их установки:

setStyle(new Notification.DecoratedCustomViewStyle())
   .setCustomContentView(remoteViews)
   .setCustomBigContentView(bigRemoteView);

Вам нужно будет добавить другое ожидающее намерение для всех параметров, которые вы указываете в макете.

Например -

RemoteViews firstOption = ....;
Intent firstOptionIntent = // add some argument in this intent which depicts this option
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,   flags);
setOnClickPendingIntent(R.id.<option_layout_id>, pendingIntent);

// похоже на другие варианты

RemoteViews secondOption = ....;

Чтобы добавить раскрывающийся список при щелчке по уведомлению, вам нужно использовать 2 разных макета, один для свернутого вида и один для расширенного вида -

Notification customNotification = new NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.notification_icon)
    .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
    .setCustomContentView(notificationLayout) // collapsed view layout
    .setCustomBigContentView(notificationLayoutExpanded) // expanded view layout
    .build();

Это стандартно для всех уведомлений от Android oreo.

Для всех уведомлений вы получаете эту опцию для сна. Если вы хотите реализовать этот же пользовательский интерфейс для более старых устройств Android, вы можете напрямую проверить исходный код пользовательского интерфейса Android или системы, откуда мы получаем опцию повтора в Android 8 и выше.

http://androidxref.com/8.1.0_r33/xref/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java#274

Проверьте использование этой строки

<!-- Notification: Snooze panel: message indicating how long the notification was snoozed for. [CHAR LIMIT=100]-->
1520    <string name="snoozed_for_time">Snoozed for <xliff:g id="time_amount" example="15 minutes">%1$s</xliff:g></string>

http://androidxref.com/8.1.0_r33/xref/frameworks/base/packages/SystemUI/res/values/strings.xml#1519

Другие вопросы по тегам