Toast在一個小的彈窗提供一個關於操作的簡單反饋。它僅僅填充消息所需的空間,並且當前的Activity保持可見和交互。例如,在你發送一個郵件之前離開,觸發一個”Draft saved”Toast,讓你知道你稍後能繼續編輯。Toast在一段時間後自動顯示。
如果用戶被要求顯示一個裝填消息,考慮使用一個Notification消息代替。
基礎
——————————————————————————————————————————————
首先,使用makeText()方法實例化一個Toast對象。這個方法獲取三個參數:應用程序Context,文本信息,和Toast持續時間。它返回一個正確實例化的Toast對象。你可以使用show()方法顯示Toast消息,如下面所示:
[java]
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
這個例子演示瞭大多數Toast通知你需要的事情。你應該很少需要什麼。你可以,然而,想把Toast放在不同的位置,或者使用你自己的佈局替代一個簡單的文本消息。下面的章節描述瞭你如何能做這些事情。
你也能束縛你的方法,並避免持有Toast對象,想這樣:
[java]
Toast.makeText(context, text, duration).show();
定位你的Toast
—————————————————————————————————————————————————————————————————————
標準的toast消息在屏幕的靠近底部,水平居中顯示。你能使用setGravity(int,int,int)方法改變這個位置。它接受三個參數:一個Gravity常量,一個x軸位置偏移,一個y軸偏移。
例如,如果你決定這個Toast應該顯示在左上角,你可以這樣設置位置:
[java]
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
如果你想拖動這個位置到右邊,增加第二個參數的值。推動它到下面,增加最後一個參數的值。
創建一個自定義的Toast視圖
—————————————————————————————————————————————————————————————————————
如果一個簡單的文本消息不能滿足,你能為你的Toast消息創建一個自定義的佈局。為瞭創建一個自定義的佈局,定義一個視圖佈局,在XML或者你的應用代碼中,並傳遞根視圖對象給setView(View)方法。
例如,你能使用下面的XML(保存為tast_layout.xml)為Toast創建佈局,在屏幕右邊的結果可見:
[html]
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
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>
註意,這個線性佈局元素的ID是”toast_layout”。你必須使用ID來填充來之這個XML的佈局,如下面所示:
[java]
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.toast_layout_root));
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,並且第二個參數是根視圖。你可以使用這個填充的佈局尋找在這個佈局中的更多的視圖對象,所以現在捕捉和定義ImageView和TextVewi元素中的內容,例如位置和時間。然後調用setView(View)方法將它傳遞給填充的佈局。你現在可以通過調用show()方法使用你的自定義佈局來顯示消息。
註意:除非你將使用setView(View)方法定義佈局,不要使用使用公共的構造函數構造Tost。如果你沒有一個自定義佈局來使用,你必須使用makeText(Context,int,int)方法來創建Toast。