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

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

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

Используйте CoordinatorLayout

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)

Java

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

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

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

Котлин

mySnackbar.show()

Java

mySnackbar.show();

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

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

Котлин

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

Java

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