为了账号安全,请及时绑定邮箱和手机立即绑定

Android 自定义Toast及BUG

标签:
Android

写这篇文章算是一个总结吧,总结一些使用Toast过程中出现的问题。
Toast弹框的优点在于使用起来方便,但是使用的时候还是有些细节需要注意。

1.自定义Toast

需求:需要展示一个有样式的提示弹框。那么有人就会问,用Dialog来做不行吗?用Dialog来做也行,但是一般的情况下Dialog无法再展示的情况下去点击Activity触发事件,所以这种情况下最简单的做法就是自定义Toast

public class MyTipsToast {    public void show(Context context, String message){        final Toast toast = new Toast(context.getApplicationContext());
        View contentView = LayoutInflater.from(context).inflate(R.layout.test,null);
        TextView textView = contentView.findViewById(R.id.tv);        if (!StringUtils.isEmpty(message)){
            textView.setText(message);
            toast.setView(contentView);
            toast.setDuration(Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP,0,36);
            toast.show();
        }
    }

}

最后,建议在自定义toast中不要做事件,提示框仅仅为了显示信息,如果想要处理事件,使用对话框更合适。

2.多个Toast快速显示的BUG

在展示Toast比较多的情况下基本都会遇到一个问题,关于这个问题,当然不同的机型会出现不同的结果。
比如一些手机,在快速点击弹出Toast的时候,下一条弹出时,会强制关闭上一条,这样当然是没有任何问题的,但是有些手机,下一条会等上一条消失后再弹出,这样时间就会累计起来,弹出多的情况会导致用户觉得Toast一直不消失,而且还没有办法交互性的让它消失。针对这种机型的Toast,我们需要做适配。

当然这种适配方案网上也有挺多,这里就不写出来了,百度一大堆,但是我在试的时候,感觉效果不是很好,所以我自己写了一种适配方案。

public class ToastUtils {    private static Context mContext;    private static List<Toast> toastList;    public static void init(Context context){
        mContext = context;
        toastList = new ArrayList<>();
    }    public static void show(String str){        if (mContext == null){            return;
        }
        Toast toast = Toast.makeText(mContext, str, Toast.LENGTH_SHORT);
        toastList.add(toast);        if (toastList.size() > 1){
            Toast toast1 = toastList.get(0);
            toastList.remove(0);
            toast1.cancel();
            toast1 = null;
        }
        toast.show();
    }


}

比较投机取巧的方法,用List保存当前正在显示的Toast,当下个Toast展示的时候,先cancel掉前一个。只不过这样写可能会有个不好的地方是,点得快的时候,会一直替换内容,太快可能会导致用户没看清之前显示的内容是什么。但是这个也好解决,你可以在show的时候加一个延时操作,我这里就不演示了。



作者:键盘上的麒麟臂
链接:https://www.jianshu.com/p/b8d108be9d5c



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消