构建和显示弹出消息

尝试 Compose 方式
Jetpack Compose 是 Android 推荐的 UI 工具包。了解如何在 Compose 中添加通知。

您可以使用 Snackbar 向用户显示简短的消息。与 通知 不同,该消息会在短时间后自动消失。 Snackbar 非常适合不需要用户采取任何操作的简短消息。例如,电子邮件应用可以使用 Snackbar 告诉用户应用已成功发送电子邮件。

使用 CoordinatorLayout

Snackbar 附加到一个视图。如果 Snackbar 附加到任何从 View 类派生的对象(例如任何常见的布局对象),它将提供基本功能。但是,如果 Snackbar 附加到 CoordinatorLayout,则 Snackbar 将获得其他功能

  • 用户可以通过滑动将其关闭。
  • Snackbar 出现时,布局会移动其他 UI 元素。例如,如果布局具有 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>

为您的 CoordinatorLayout 设置 android:id 标记。显示消息时需要布局的 ID。

图 1.Snackbar 出现时,CoordinatorLayout 会将 FloatingActionButton 向上移动。

显示消息

显示消息分两步完成。首先,您使用消息文本创建一个 Snackbar 对象。然后,您调用该对象的 show() 方法以向用户显示消息。

创建 Snackbar 对象

通过调用静态 Snackbar.make() 方法创建 Snackbar 对象。创建 Snackbar 时,请指定其显示的消息以及显示消息的时间长度

Kotlin

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

Java

Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
view
要将 Snackbar 附加到的视图。该方法从传递的视图向上搜索视图层次结构,直到到达 CoordinatorLayout 或窗口装饰的内容视图。通常,传递包含您内容的 CoordinatorLayout 更简单。
stringId
要显示的消息的资源 ID。这可以是格式化或未格式化的文本。
duration
显示消息的时间长度。这可以是 LENGTH_SHORTLENGTH_LONG

向用户显示消息

创建 Snackbar 后,请调用其 show() 方法以向用户显示 Snackbar

Kotlin

mySnackbar.show()

Java

mySnackbar.show();

系统不会同时显示多个 Snackbar 对象,因此,如果视图当前正在显示另一个 Snackbar,则系统会将您的 Snackbar 排队,并在当前 Snackbar 过期或关闭后显示它。

如果您想向用户显示消息并且不需要调用任何 Snackbar 对象的实用程序方法,则在调用 show() 后,您不需要保留对 Snackbar 的引用。出于这个原因,通常使用方法链在一行代码中创建和显示 Snackbar

Kotlin

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();