构建并显示弹出式消息

试用 Compose 方式
Jetpack Compose 是推荐在 Android 设备上使用的界面工具包。了解如何在 Compose 中添加通知。
<ph type="x-smartling-placeholder"></ph> 信息提示控件 →

您可以使用 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>

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

图 1. CoordinatorLayout将 当 Snackbar 显示时,向上键 FloatingActionButton

显示消息

显示消息分为两步。首先,创建一个 Snackbar 对象。然后,调用该对象的 show() 方法向用户显示消息。

创建 Snackbar 对象

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

Kotlin

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

Java

Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
次观看
Snackbar 附加到的视图。该方法会在 视图层次结构,直到达到 CoordinatorLayout 或窗口装饰的内容视图。 通常,传递 CoordinatorLayout 更简单。 来封装您的内容
字符串 ID
要显示的消息的资源 ID。它可以 无格式文本。
时长
显示消息的时长。可以是 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();