[Android]Toast的工具类(- -!)可啪的重复显示Toast


toast本来就是提示用户信息用的,首先分析出当前面临的问题:

1.想显示多姿多彩的Toast
2.toast重复显示的问题及解决办法。

首先解决第一个问题:
Toast可以设置显示位置,通过.setGravity(Gravity.CENTER, 0, 0);即可解决问题
toast可以设置显示的时长.setDuration(duration);不要期望使用数字代表时长了,完全无效的,只能用Toast.LENGTH_SHORT 与 Toast.LENGTH_LONG,那我就想手动设置时间怎么办…,好吧~~这是一个问题。
可能有同学说了,我想显示图片可以么,答案是完全可以的,你可以放一个你自己的view进行,至于放什么稀奇古怪的东东,那就随你了,然后就引出了第一种不重复显示的方法了,每次有新的就让旧的toast调用cancel()方法,然后在展示新的,这样每次都可以加载一个新的view了

  public static void buildToast(Context context,String msg,int duration,View mLayout){

      if(mSpecialToast == null){
      mSpecialToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
      }else{
        mSpecialToast.cancel();
        mSpecialToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
        mSpecialToast.setGravity(Gravity.CENTER, 0, 0);
        mSpecialToast.setDuration(duration);
      }

      //将自定义View覆盖Toast的View
      mSpecialToast.setView(mLayout);

      mSpecialToast.show();
  }

我们知道toast存在一个cancel()的方法,通过cancel,我们可以将Toast消去,那多次弹框的时候重复cancel()和show()调用效率有些低唉,那可以使用setText(Str),将想替换的文字替换即可,然后加一个延迟的限制,防止多次调用后出现很久再消失的情况,这就是第二种方法,通过延迟重置的方法替换toast内容。

    //延迟的runnable
 private static Runnable r = new Runnable() {
    public void run() {
      lastMsg = null;
      mTextToast.cancel();
    }
  };

public static void showTextToast(Context mContext, String text, int duration) {
    // 如果为null或者 本次与上次的文字相同,将不进行再次展示;否则移除上次展示的文字,展示最新的文字
    if (TextUtils.isEmpty(text) || TextUtils.equals(text, lastMsg)) {
      return;
    }
    lastMsg = text;
    if (mHandler == null) {
      mHandler = new Handler();
    }
    mHandler.removeCallbacks(r);
    if (mTextToast != null) {
      mTextToast.setText(text);
    } else {
      mTextToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
    }
    mHandler.postDelayed(r, duration);
    mTextToast.show();
  }

来自博主bluewindtalker
其实替换view的方法,也可以通过第二种runnable延迟处理的方法进行操作,这样可以自定义显示的toast的布局了,每次通过setView()的方法替换不同的显示界面,然后采用第二种延迟的方法即可,但是,有一很重要的点,setView之后就不要setText了,因为view被替换了,所以建议写出两个静态常量的Toast对象进行处理,详细代码就不写出了,童鞋们可以自己实现下·~~喵

posted @ 2016-05-04 21:03  bluewindtalker  阅读(501)  评论(0)    收藏  举报