自定义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一样调用即可。