写这篇文章算是一个总结吧,总结一些使用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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦