[Android]Toast的工具類(- -!)可啪的重複顯示Toast
toast本來就是提示使用者資訊用的,首先分析出當前面臨的問題:
1.想顯示多姿多彩的Toast
2.toast重複顯示的問題及解決辦法。
首先解決第一個問題:
Toast可以設定顯示位置,通過.setGravity(Gravity.CENTER, 0, 0);即可解決問題
toast可以設定顯示的時長.setDuration(duration);不要期望使用數字代表時長了,完全無效的,只能用Toast.LENGTH_SHORT 與 Toast.LENGTH_LONG,那我就想手動設定時間怎麼辦…,好吧~~這是一個問題。
可能有同學說了,我想顯示圖片可以麼,答案是完全可以的,你可以放一個你自己的view進行,至於放什麼稀奇古怪的東東,那就隨你了,然後就引出了第一種不重複顯示的方法了,每次有新的就讓舊的toast呼叫cancel()方法,然後在展示新的,這樣每次都可以載入一個新的view了
public static void buildToast(Context context,String msg,int duration,View mLayout){
if(mSpecialToast == null){
mSpecialToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
}else{
mSpecialToast.cancel();
mSpecialToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
mSpecialToast.setGravity(Gravity.CENTER, 0 , 0);
mSpecialToast.setDuration(duration);
}
//將自定義View覆蓋Toast的View
mSpecialToast.setView(mLayout);
mSpecialToast.show();
}
我們知道toast存在一個cancel()的方法,通過cancel,我們可以將Toast消去,那多次彈框的時候重複cancel()和show()呼叫效率有些低唉,那可以使用setText(Str),將想替換的文字替換即可,然後加一個延遲的限制,防止多次呼叫後出現很久再消失的情況,這就是第二種方法,通過延遲重置的方法替換toast內容。
//延遲的runnable
private static Runnable r = new Runnable() {
public void run() {
lastMsg = null;
mTextToast.cancel();
}
};
public static void showTextToast(Context mContext, String text, int duration) {
// 如果為null或者 本次與上次的文字相同,將不進行再次展示;否則移除上次展示的文字,展示最新的文字
if (TextUtils.isEmpty(text) || TextUtils.equals(text, lastMsg)) {
return;
}
lastMsg = text;
if (mHandler == null) {
mHandler = new Handler();
}
mHandler.removeCallbacks(r);
if (mTextToast != null) {
mTextToast.setText(text);
} else {
mTextToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
}
mHandler.postDelayed(r, duration);
mTextToast.show();
}
來自博主bluewindtalker
其實替換view的方法,也可以通過第二種runnable延遲處理的方法進行操作,這樣可以自定義顯示的toast的佈局了,每次通過setView()的方法替換不同的顯示介面,然後採用第二種延遲的方法即可,但是,有一很重要的點,setView之後就不要setText了,因為view被替換了,所以建議寫出兩個靜態常量的Toast物件進行處理,詳細程式碼就不寫出了,童鞋們可以自己實現下·~~喵