虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Android编程 > Android编程实现Toast只显示最后一条的方法

Android编程实现Toast只显示最后一条的方法
类别:Android编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了Android编程实现Toast只显示最后一条的方法,结合实例形式总结了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相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》及《Android控件用法总结

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

相关热词搜索: Android Toast 显示 最后一条