Android編程實(shí)現(xiàn)Toast只顯示最后一條的方法
本文實(shí)例講述了Android編程實(shí)現(xiàn)Toast只顯示最后一條的方法。分享給大家供大家參考,具體如下:
在做Android開發(fā)中,時(shí)不時(shí)的可能會(huì)用到Toast,但用Toast的時(shí)候,連續(xù)使用會(huì)存在一個(gè)問題,就是一條條顯示Toast。而不是直接顯示最后一條。因此,根據(jù)此需求,現(xiàn)在寫了ToastUtil這個(gè)類,該類中有三個(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();
}
//方法二:注意此方法不能再子線程中使用
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)容感興趣的讀者可查看本站專題:《Android布局layout技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android實(shí)現(xiàn)訂單倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)訂單倒計(jì)時(shí)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)
本文主要介紹Android 開發(fā)個(gè)人理財(cái)工具項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn),這里主要對實(shí)現(xiàn)項(xiàng)目的流程做了詳細(xì)概述,并對啟動(dòng)界面簡單實(shí)現(xiàn),有需要的小伙伴可以參考下2016-08-08
AlertDialog點(diǎn)擊按鈕不消失的實(shí)現(xiàn)方法
我有一個(gè)文本輸入對話框,當(dāng)我點(diǎn)擊對話框上的“是”按鈕,它會(huì)驗(yàn)證輸入,然后關(guān)閉對話框,但是,如果輸入錯(cuò)誤,我想停留在同一個(gè)對話框中。怎么實(shí)現(xiàn)此功能呢?下面通過本文給大家分享下2017-01-01
Android仿QQ分組實(shí)現(xiàn)二級菜單展示
這篇文章主要為大家詳細(xì)介紹了Android仿QQ分組實(shí)現(xiàn)二級菜單展示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Android實(shí)現(xiàn)點(diǎn)擊兩次返回鍵退出
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)點(diǎn)擊兩次返回鍵退出的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android實(shí)現(xiàn)旋轉(zhuǎn)動(dòng)畫的兩種方式案例詳解
這篇文章主要介紹了Android實(shí)現(xiàn)旋轉(zhuǎn)動(dòng)畫的兩種方式,需要的朋友可以參考下2021-08-08
Android開發(fā)中的錯(cuò)誤及解決辦法總結(jié)
本文屬于個(gè)人平時(shí)項(xiàng)目開發(fā)過程遇到的一些問題,記錄下來并總結(jié)解決方案,希望能幫到大家解決問題,需要的朋友可以參考下2022-02-02

