Уведомление – это краткое сообщение, которое появляется в нижней части экрана. Они сообщают о результатах операции или действия, не прерывая работу пользователя. Снекбары исчезают через несколько секунд. Пользователь также может закрыть их, выполнив определенное действие, например нажав кнопку.
Рассмотрим три примера использования уведомлений:
- Подтверждение действия. После того как пользователь удалит письмо или сообщение, появится уведомление с подтверждением действия и кнопкой Отменить.
- Статус сети. Если приложение теряет подключение к интернету, появляется снекбар с уведомлением о том, что оно перешло в офлайн-режим.
- Отправка данных. После успешной отправки формы или обновления настроек в нижней части экрана появляется уведомление о том, что изменения сохранены.
Простой пример
Чтобы реализовать снекбар, сначала создайте SnackbarHost, который включает свойство SnackbarHostState. SnackbarHostState предоставляет доступ к функции showSnackbar(), которую можно использовать для показа снекбара.
Для этой функции приостановки требуется CoroutineScope, например возвращаемый функцией rememberCoroutineScope. Ее можно вызывать в ответ на события интерфейса, чтобы показать Snackbar в Scaffold.
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { snackbarHostState.showSnackbar("Snackbar") } } ) } ) { contentPadding -> // Screen content }
Всплывающее уведомление с действием
Вы можете указать необязательное действие и настроить длительность Snackbar.
Функция snackbarHostState.showSnackbar() принимает дополнительные параметры actionLabel и duration и возвращает SnackbarResult.
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { val result = snackbarHostState .showSnackbar( message = "Snackbar", actionLabel = "Action", // Defaults to SnackbarDuration.Short duration = SnackbarDuration.Indefinite ) when (result) { SnackbarResult.ActionPerformed -> { /* Handle snackbar action performed */ } SnackbarResult.Dismissed -> { /* Handle snackbar dismissed */ } } } } ) } ) { contentPadding -> // Screen content }
Вы можете указать специальный параметр Snackbar с помощью параметра snackbarHost. Подробная информация приведена в справочной документации по API SnackbarHost.
Основные положения
actionLabel = "Action"– задает текст командной кнопки.duration = SnackbarDuration.Indefinite– панель будет показываться, пока пользователь или программа не закроет ее.SnackbarResult.ActionPerformed– пользователь нажал командную кнопку в уведомлении.SnackbarResult.Dismissed– пользователь закрыл снекбар, не нажав командную кнопку.