Создание и отображение всплывающего сообщения

Попробуйте способ создания
Jetpack Compose — рекомендуемый набор инструментов пользовательского интерфейса для Android. Узнайте, как добавлять уведомления в Compose.

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

Используйте координаторлайаут

К представлению прикреплена Snackbar . Snackbar обеспечивает базовую функциональность, если он прикреплен к любому объекту, производному от класса View , например к любому из общих объектов макета. Однако если Snackbar прикреплен к CoordinatorLayout , Snackbar получает дополнительные функции:

  • Пользователь может закрыть Snackbar , проведя по нему пальцем.
  • Макет перемещает другие элементы пользовательского интерфейса при появлении Snackbar . Например, если в макете есть FloatingActionButton , макет перемещает кнопку вверх, когда отображается Snackbar , вместо того, чтобы рисовать Snackbar поверх кнопки. Вы можете увидеть, как это выглядит на рисунке 1.

Класс CoordinatorLayout предоставляет расширенный набор функций FrameLayout . Если ваше приложение уже использует FrameLayout , вы можете заменить этот макет CoordinatorLayout , чтобы включить полную функциональность Snackbar . Если ваше приложение использует другие объекты макета, оберните существующие элементы макета в CoordinatorLayout , как показано в следующем примере:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/myCoordinatorLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Here are the existing layout elements, now wrapped in
         a CoordinatorLayout. -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- ...Toolbar, other layouts, other elements... -->

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

Установите тег android:id для вашего CoordinatorLayout . При отображении сообщения вам понадобится идентификатор макета.

Рис. 1. CoordinatorLayout перемещает FloatingActionButton вверх при появлении Snackbar .

Отображение сообщения

Отображение сообщения состоит из двух шагов. Сначала вы создаете объект Snackbar с текстом сообщения. Затем вы вызываете метод show() этого объекта, чтобы отобразить сообщение пользователю.

Создайте объект Snackbar

Создайте объект Snackbar , вызвав статический метод Snackbar.make() . При создании Snackbar укажите отображаемое сообщение и продолжительность его отображения:

Котлин

val mySnackbar = Snackbar.make(view, stringId, duration)

Ява

Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
вид
Представление, к которому можно прикрепить Snackbar . Метод выполняет поиск вверх по иерархии представлений от переданного представления до тех пор, пока не достигнет CoordinatorLayout или представления содержимого декора окна. Обычно проще передать CoordinatorLayout включающий ваш контент.
идентификатор строки
Идентификатор ресурса сообщения, которое вы хотите отобразить. Это может быть форматированный или неформатированный текст.
продолжительность
Время отображения сообщения. Это может быть LENGTH_SHORT или LENGTH_LONG .

Показать сообщение пользователю

После создания Snackbar вызовите его метод show() чтобы отобразить Snackbar пользователю:

Котлин

mySnackbar.show()

Ява

mySnackbar.show();

Система не отображает несколько объектов Snackbar одновременно, поэтому, если в представлении в данный момент отображается другой Snackbar , система ставит ваш Snackbar в очередь и отображает его после истечения срока действия текущего Snackbar или его закрытия.

Если вы хотите показать сообщение пользователю и вам не нужно вызывать какие-либо служебные методы объекта Snackbar , вам не нужно сохранять ссылку на Snackbar после вызова show() . По этой причине для создания и отображения Snackbar принято использовать цепочку методов в одном операторе:

Котлин

Snackbar.make(
        findViewById(R.id.myCoordinatorLayout),
        R.string.email_sent,
        Snackbar.LENGTH_SHORT
).show()

Ява

Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_sent,
                        Snackbar.LENGTH_SHORT)
        .show();