浮動式訊息總覽

浮動式訊息會利用小型的彈出式視窗提供簡易回饋。它只會填滿訊息所需的空間,而目前進行中的活動仍會出現在畫面上,讓您能夠繼續進行活動。浮動式訊息在逾時後會自動消失。

舉例來說,如果您按一下電子郵件上的 [傳送],就會觸發「正在傳送郵件...」的浮動式訊息,如下方的螢幕擷取畫面所示:

如果使用者必須針對狀態訊息採取動作,請考慮改用通知

基本概念

首先,請利用其中一個 makeText() 方法將 Toast 物件實例化。這個方法有三個參數:應用程式 Context、文字訊息,以及浮動式訊息的持續時間。此參數會傳回已正確實例化的浮動式訊息物件。您可以利用 show() 來顯示浮動式訊息通知,如下方範例所示:

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

Java

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

這個範例提供了您在設定大多數浮動式訊息時的所需資訊,所以您應該不太需要其他參考資料。不過,您可能會想要把浮動式訊息放在不同的位置,或是使用您自己的版面配置,而不是簡易文字訊息。下列數節將說明該如何完成這些設定。

您也可以將不同方法串聯起來,避免只利用浮動式訊息物件進行設定,例如:

Kotlin

    Toast.makeText(context, text, duration).show()
    

Java

    Toast.makeText(context, text, duration).show();
    

變更浮動式訊息的位置

標準的浮動式訊息通知會出現在接近螢幕底部的地方,且會水平置中。您可以利用 setGravity(int, int, int) 方法來變更浮動式訊息的位置。這個方法可接受三種參數:Gravity 常數、X 方向位移,以及 Y 方向位移。

舉例來說,如果您決定要讓浮動式訊息出現在螢幕的左上方,請參考下列範例中的重力常數設定方式:

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

Java

    toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
    

如果想將浮動式訊息往右移動,請增加第二個參數的值。想將浮動式訊息往下移動,則請增加最後一個參數的值。

建立自訂浮動式訊息視圖

如果簡易文字訊息無法滿足您的需求,您可以為浮動式訊息通知建立自訂版面配置。如要建立自訂版面配置,請使用 XML 或您應用程式的程式碼定義 View 版面配置,並將根 View 物件傳送給 setView(View) 方法。

下列程式碼片段包含某則浮動式訊息通知的自訂版面配置 (儲存為 layout/custom_toast.xml):

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

請注意,LinearLayout 元素的 ID 是「custom_toast_container」。您必須使用這個 ID 和 XML 版面配置檔案「custom_toast」的 ID 來加載版面配置,如下方範例所示:

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

Java

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
    

首先,請利用 getLayoutInflater() (或 getSystemService()) 來擷取 LayoutInflater,然後利用 inflate(int, ViewGroup) 加載 XML 的版面配置。第一個參數是版面配置的資源 ID,第二個則是根 View。您可以利用這個已加載的版面配置,在版面配置中尋找更多的 View 物件,接著擷取並定義 ImageView 和 TextView 元素的內容。最後,請利用 Toast(Context) 建立新的浮動式訊息,然後設定該浮動式訊息的幾項屬性,例如重力和持續時間。接下來,請呼叫 setView(View),並將它傳送給已加載的版面配置。現在,您只要呼叫 show(),就能以自訂版面配置顯示浮動式訊息。

注意:請勿使用公用建構函式設定浮動式訊息,除非您要利用 setView(View) 來定義版面配置。如果您沒有可用的自訂版面配置,就必須使用 makeText(Context, int, int) 建立浮動式訊息。