自製吐司訊息(Customizing Android Toast)

Customizing Toast

原本的 Toast 是小小的黑色背景,在螢幕下方出現,當 Activity 的背景也是黑色的時候,會不太容易看見,這時候可以設計自己的 Toast,讓訊息明顯,以免被使用者忽略了。
原本呼叫 Toast 顯示的方法如下:
Toast.makeText(context, "要顯示的訊息", Toast.LENGTH_LONG).show();
自製 Toast 必須用到自定的 layout。

製作的方法

這裡簡單的分為兩個步驟:
  1. 設計 layout
  2. 撰寫程式碼來顯示

1.設計 layout

依照一般設計 layout 的方式,沒什麼不同,這裡的範例如下:
layout/toast.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layToast"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F5CE00" >

    <TextView
        android:id="@+id/txtToastMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="10dp"
        android:text="Toast"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#151515" />

</RelativeLayout>
背景設定為黃色,文字設定為黑色。

2.撰寫程式碼來顯示

這個範例中,我把自製吐司寫成一個工具類別方法,方便每次呼叫使用。程式碼如下:
public class Utility {

    public static void showToast(Activity activity, String msg){
        LayoutInflater inflater = activity.getLayoutInflater();
        View layout = inflater.inflate(R.layout.toast, (ViewGroup) activity.findViewById(R.id.layToast));

        TextView text = (TextView) layout.findViewById(R.id.txtToastMsg);
        text.setText(msg);

        Toast toast = new Toast(activity);
        //置中
        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        //靠上
        //toast.setGravity(Gravity.TOP, 0, 200);
        //靠下
        //toast.setGravity(Gravity.BOTTOM, 0, 100);

        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();
    }
}
inflate 的第一個參數是 xml 檔的名稱,第二個則為 layout 的名稱。之後就是設定訊息文字,接著是設定 Toast 要出現的位置,指定它的 Gravity 來靠上、中或下。一樣要設定顯示的時間長度,這裡指定為 Toast.LENGTH_LONG。再來就是把 layout 指定給 Toast。最後就把這個自製的 Toast 給顯示出來。

現在,當需要吐司訊息時,就可以去呼叫我們的 showToast,程式碼如下:
public class MainActivity extends Activity {

    private Activity activity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        activity = this;

        Button btnToast = (Button) findViewById(R.id.btnToast);
        btnToast.setOnClickListener(toastOnClickListener);

    }

    private OnClickListener toastOnClickListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            Utility.showToast(activity, "這是自製吐司訊息!!");
        }
    };
}
完成了。如果你要更多變化,可以到參考資料中的網站去看看。

範例程式碼:CustomizingToastDemo (GitHub)

參考資料

本文網址:http://blog.tonycube.com/2013/12/androidcustomizing-toast.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。