Toasts(提示框)

提示框

提示框可以在一個小的彈出框裏提供關於操作的簡單反饋。它只會佔用消息所需要的空間並且當前的activity始終是可見可交互的。例如,在你發送郵件前離開時會觸發一個“保存爲草稿”的提示框讓你知道你可以以後繼續編輯。提示框會在一段時間後自動消失。

如果需要用戶響應這個狀態信息的話,請考慮使用 Notification 來代替。

基礎知識


首先使用 makeText() 方法實例化一個 Toast 對象。該方法需要三個參數:應用 Context,文本消息和提示框持續時長。它會返回一個恰當初始化的Toast對象。你可以使用 show() 方法顯示提示框通知,就像下面的實例中演示的那樣:

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

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

對於大部分提示框通知來說這個實例演示了所有你需要的東西。你應該不會需要其他東西了。然而,你可能想要提示框的放置的位置有所不同,又或者你不想使用簡單的文本消息而是使用自己的佈局。下面的章節會向你介紹如何達到這些效果。

你也可以把你的方法串起來,避免持有Toast對象,就像這樣:

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

放置你的提示框


標準的提示框通知出現在靠近屏幕底部的位置並且水平居中。你可以使用 setGravity(int, int, int) 方法來修改位置。它接收三個參數:Gravity 常量,x座標偏移量,y座標偏移量。

例如,如果你決定提示框應該出現在左上角,你可以像這樣設置gravity:

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

如果你想要把位置向右邊移動,增加第二個參數的數值即可。要想往下移動,增加最後一個參數的數值。

創建自定義提示框視圖


如果簡單文本消息不夠用的話,你可以爲你的提示框通知創建自定義的佈局。在XML或應用的代碼裏定義一個視圖佈局,然後把根 View 對象傳遞給 setView(View) 就可以創建一個自定義佈局了。

例如,你可以使用下面的XML爲提示框創建可見佈局(保存爲toast_layout.xml):

<LinearLayout xmlns:android="http://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_root”。你必須使用這個ID從XML中擴充佈局,就像這樣:

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和TextView元素的內容。最終,使用 Toast(Context) 創建一個新的Toast,再設置諸如gravity和持續時長的參數,然後把擴充的佈局傳入 setView(View) 中並調用。現在你可以調用 show() 來顯示自定義佈局的提示框了。

註解:除非你準備使用 setView(View) 定義佈局,否則不要使用公有的構造方法創建提示框。如果你不需要使用自定義佈局,你應該使用 makeText(Context, int, int) 去創建提示框。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章