自定义Toast解决快速点击时重复弹出,排队无止尽

解决办法:自定义MyToast类:

public class MyToast {
    /** 之前显示的内容 */
    private static String oldMsg ;
    /** Toast对象 */
    private static Toast toast = null ;
    /** 第一次时间 */
    private static long oneTime = 0 ;
    /** 第二次时间 */
    private static long twoTime = 0 ;
    /**
     * 显示Toast
     * @param context
     * @param message
     */
    public static void showToast(Context context, String message){
        if(toast == null){
            toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
            toast.show() ;
            oneTime = System.currentTimeMillis() ;
        }else{
            twoTime = System.currentTimeMillis() ;
            if(message.equals(oldMsg)){
                if(twoTime - oneTime > Toast.LENGTH_SHORT){
                    toast.show() ;
                }
            }else{
                oldMsg = message ;
                toast.setText(message) ;
                toast.show() ;
            }
        }
        oneTime = twoTime ;
    }
}

 


调用就很简单了,在要用的地方:
MyToast.showToast(Activity.this, "获取数据异常");


============================================手动分割线=============================================
当然,如果你还有修改Toast位置或者样式的需求,就需要自定义自己的Toast
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class NewToast {
    private Toast mToast;
    private TextView textView;

    private NewToast(Context context, CharSequence text, int duration) {
        View v = LayoutInflater.from(context).inflate(R.layout.eplay_toast, null);
        textView = v.findViewById(R.id.textView1);
        textView.setText(text);
        mToast = new Toast(context);
        mToast.setDuration(duration);
        mToast.setGravity(Gravity.BOTTOM, 0, 360);//距离底部距离
        mToast.setView(v);
    }

    public static NewToast makeText(Context context, CharSequence text, int duration) {
        return new NewToast(context, text, duration);
    }

    public void show() {
        if (mToast != null) {
            mToast.show();
        }
    }

    public void setGravity(int gravity, int xOffset, int yOffset) {
        if (mToast != null) {
            mToast.setGravity(gravity, xOffset, yOffset);
        }
    }

    public void setText(String text) {
        textView.setText(text);
    }
}

所用布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/fillet_blank_back"
    android:gravity="center"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:paddingLeft="30dp"
    android:paddingRight="30dp" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#FFFFFF"/>

</FrameLayout>

背景drawable是Toast需要的圆角背景图

使用就是在MyToast.class中以下这行Toast修改为NewToast即可

 toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
直接用的换也是像Toast一样调用即可。


posted @ 2016-11-24 17:36  童话二分之一  阅读(1484)  评论(0编辑  收藏  举报