[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对象进行处理,详细代码就不写出了,童鞋们可以自己实现下·~~喵

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值