软件编程
位置:首页>> 软件编程>> Android编程>> Android编程实现Toast只显示最后一条的方法

Android编程实现Toast只显示最后一条的方法

作者:QQxiaoqiang1573  发布时间:2023-12-13 11:54:49 

标签:Android,Toast

本文实例讲述了Android编程实现Toast只显示最后一条的方法。分享给大家供大家参考,具体如下:

在做Android开发中,时不时的可能会用到Toast,但用Toast的时候,连续使用会存在一个问题,就是一条条显示Toast。而不是直接显示最后一条。因此,根据此需求,现在写了ToastUtil这个类,该类中有三个方法供选择。

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);
   }
 }
}

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/qqxiaoqiang1573/article/details/50483517

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com