Android編程實(shí)現(xiàn)Toast只顯示最后一條的方法
本文實(shí)例講述了Android編程實(shí)現(xiàn)Toast只顯示最后一條的方法。分享給大家供大家參考,具體如下:
在做Android開(kāi)發(fā)中,時(shí)不時(shí)的可能會(huì)用到Toast,但用Toast的時(shí)候,連續(xù)使用會(huì)存在一個(gè)問(wèn)題,就是一條條顯示Toast。而不是直接顯示最后一條。因此,根據(jù)此需求,現(xiàn)在寫(xiě)了ToastUtil這個(gè)類(lèi),該類(lèi)中有三個(gè)方法供選擇。
ToastUtil.Java
import android.content.Context; import android.graphics.PixelFormat; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.Gravity; import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; public class ToastUtil { //方法一 private static Handler mHandler = new Handler(Looper.getMainLooper()); private static Toast mToast = null; private static Object synObject = new Object(); public static void showToastByThread(Context context, String msg){ showToastByThread(context, msg, Toast.LENGTH_SHORT); } public static void showToastByThread(Context context, int msg){ showToastByThread(context, context.getText(msg), Toast.LENGTH_SHORT); } public static void showToastByThread(final Context context, final CharSequence msg, final int length){ new Thread(new Runnable() { @Override public void run() { mHandler.post(new Runnable() { @Override public void run() { synchronized (synObject) { if (mToast != null){ mToast.setText(msg); mToast.setDuration(length); }else{ mToast = Toast.makeText(context, msg, length); } mToast.show(); } } }); } }).start(); } //方法二:注意此方法不能再子線(xiàn)程中使用 private static long oneTime; private static long twoTime; private static String oldMsg; public static void showToastByTime(Context context, String msg){ if (mToast == null) { mToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT); mToast.show(); oneTime = System.currentTimeMillis(); } else { twoTime = System.currentTimeMillis(); if (msg.equals(oldMsg)){ if (twoTime-oneTime > Toast.LENGTH_SHORT){ mToast.show(); } } else { oldMsg = msg; mToast.setText(msg); mToast.show(); } } oneTime = twoTime; } public static void showToastByTime(Context context, int msg){ showToastByTime(context, context.getString(msg)); } //方法三 public static TextView mTextView; public static WindowManager mWindowManager = null; private static Handler mPriHandler = new Handler(){ @Override public void handleMessage(Message msg) { cancelToast(); } }; public static void showToastByWindow(Context context, String msg){ mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (mTextView == null){ mTextView = new TextView(context); } mTextView.setText(msg); mTextView.setTextSize(20); mTextView.setPadding(0, 0, 0, 30); if (mTextView.getParent() == null){ WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.gravity= Gravity.BOTTOM; params.alpha = 0.65f; params.x = 0; params.height = WindowManager.LayoutParams.WRAP_CONTENT; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; params.format = PixelFormat.TRANSLUCENT; params.windowAnimations = 0; mWindowManager.addView(mTextView, params); mPriHandler.sendEmptyMessageDelayed(101, 1000); } else { mTextView.setText(msg); mPriHandler.removeMessages(101); mPriHandler.sendEmptyMessageDelayed(101, 1000); } } public static void cancelToast(){ if (mTextView != null && mTextView.getParent() != null){ mWindowManager.removeView(mTextView); } } }
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android布局layout技巧總結(jié)》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android調(diào)試技巧與常見(jiàn)問(wèn)題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android實(shí)現(xiàn)訂單倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)訂單倒計(jì)時(shí)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)
本文主要介紹Android 開(kāi)發(fā)個(gè)人理財(cái)工具項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn),這里主要對(duì)實(shí)現(xiàn)項(xiàng)目的流程做了詳細(xì)概述,并對(duì)啟動(dòng)界面簡(jiǎn)單實(shí)現(xiàn),有需要的小伙伴可以參考下2016-08-08AlertDialog點(diǎn)擊按鈕不消失的實(shí)現(xiàn)方法
我有一個(gè)文本輸入對(duì)話(huà)框,當(dāng)我點(diǎn)擊對(duì)話(huà)框上的“是”按鈕,它會(huì)驗(yàn)證輸入,然后關(guān)閉對(duì)話(huà)框,但是,如果輸入錯(cuò)誤,我想停留在同一個(gè)對(duì)話(huà)框中。怎么實(shí)現(xiàn)此功能呢?下面通過(guò)本文給大家分享下2017-01-01Android仿QQ分組實(shí)現(xiàn)二級(jí)菜單展示
這篇文章主要為大家詳細(xì)介紹了Android仿QQ分組實(shí)現(xiàn)二級(jí)菜單展示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Android實(shí)現(xiàn)點(diǎn)擊兩次返回鍵退出
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)點(diǎn)擊兩次返回鍵退出的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android自定義UI手勢(shì)密碼改進(jìn)版源碼下載
這篇文章主要介紹了Android自定義UI手勢(shì)密碼改進(jìn)版,為大家提供了手勢(shì)密碼源碼下載,,具有一定的實(shí)用性,感興趣的小伙伴們可以參考一下2016-10-10Android實(shí)現(xiàn)旋轉(zhuǎn)動(dòng)畫(huà)的兩種方式案例詳解
這篇文章主要介紹了Android實(shí)現(xiàn)旋轉(zhuǎn)動(dòng)畫(huà)的兩種方式,需要的朋友可以參考下2021-08-08Android開(kāi)發(fā)中的錯(cuò)誤及解決辦法總結(jié)
本文屬于個(gè)人平時(shí)項(xiàng)目開(kāi)發(fā)過(guò)程遇到的一些問(wèn)題,記錄下來(lái)并總結(jié)解決方案,希望能幫到大家解決問(wèn)題,需要的朋友可以參考下2022-02-02