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

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

您可以使用 Snackbar到 向使用者顯示簡短訊息取消喜歡 通知, 訊息會在一小段時間過後自動消失Snackbar 是 適合使用者無需操作的簡短訊息。舉例來說 電子郵件應用程式可以使用 Snackbar,告訴使用者應用程式 成功傳送電子郵件

使用 CoordinatorLayout

Snackbar 已附加至檢視區塊。Snackbar 如果附加至任何衍生自 View 類別,例如 使用任何通用版面配置物件。不過,如果 Snackbar 是 附加至 CoordinatorLayout, Snackbar 提供額外功能:

  • 使用者只要向外滑動,即可關閉 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 物件 Snackbar.make() 方法。建立 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();