[Android]Toast的工具类(- -!)可啪的重复显示Toast
2016-05-04 21:03
513 查看
toast本来就是提示用户信息用的,首先分析出当前面临的问题:
1.想显示多姿多彩的Toast
2.toast重复显示的问题及解决办法。
首先解决第一个问题:
Toast可以设置显示位置,通过.setGravity(Gravity.CENTER, 0, 0);即可解决问题
toast可以设置显示的时长.setDuration(duration);不要期望使用数字代表时长了,完全无效的,只能用Toast.LENGTH_SHORT 与 Toast.LENGTH_LONG,那我就想手动设置时间怎么办…,好吧~~这是一个问题。
可能有同学说了,我想显示图片可以么,答案是完全可以的,你可以放一个你自己的view进行,至于放什么稀奇古怪的东东,那就随你了,然后就引出了第一种不重复显示的方法了,每次有新的就让旧的toast调用cancel()方法,然后在展示新的,这样每次都可以加载一个新的view了
我们知道toast存在一个cancel()的方法,通过cancel,我们可以将Toast消去,那多次弹框的时候重复cancel()和show()调用效率有些低唉,那可以使用setText(Str),将想替换的文字替换即可,然后加一个延迟的限制,防止多次调用后出现很久再消失的情况,这就是第二种方法,通过延迟重置的方法替换toast内容。
来自博主bluewindtalker
其实替换view的方法,也可以通过第二种runnable延迟处理的方法进行操作,这样可以自定义显示的toast的布局了,每次通过setView()的方法替换不同的显示界面,然后采用第二种延迟的方法即可,但是,有一很重要的点,setView之后就不要setText了,因为view被替换了,所以建议写出两个静态常量的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对象进行处理,详细代码就不写出了,童鞋们可以自己实现下·~~喵
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories