建立和顯示彈出式視窗訊息

試試 Compose 的方式
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中新增通知。

您可以使用 Snackbar 向使用者顯示簡短訊息。與通知不同,訊息會在短時間後自動消失。Snackbar 非常適合用於使用者不需要採取行動的簡短訊息。舉例來說,電子郵件應用程式可以使用 Snackbar 通知使用者應用程式已成功傳送電子郵件。

使用 CoordinatorLayout

Snackbar 已附加至檢視畫面。如果 Snackbar 附加至衍生自 View 類別的任何物件 (例如任何常見的版面配置物件),就會提供基本功能。不過,如果 Snackbar 附加至 CoordinatorLayoutSnackbar 就會獲得額外功能:

  • 使用者可以滑動關閉 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. CoordinatorLayout 會在 Snackbar 顯示時將 FloatingActionButton 向上移動。

顯示訊息

顯示訊息有兩個步驟。首先,您會使用訊息文字建立 Snackbar 物件。接著,您可以呼叫該物件的 show() 方法,向使用者顯示訊息。

建立 Snackbar 物件

呼叫靜態 Snackbar.make() 方法,建立 Snackbar 物件。建立 Snackbar 時,請指定要顯示的訊息和顯示訊息的時間長度:

Kotlin

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

Java

Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
查看
要附加 Snackbar 的檢視畫面。這個方法會從傳遞的檢視畫面搜尋檢視區塊階層,直到找到 CoordinatorLayout 或視窗裝飾的內容檢視畫面為止。通常,傳遞包含內容的 CoordinatorLayout 會比較簡單。
stringId
要顯示的訊息資源 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();