Android开发之控制Toast的开启与关闭
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android开发之控制Toast的开启与关闭,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1746字,纯文字阅读大概需要3分钟。
内容图文
开发这个程序之前先解释一下,为什么Toast信息提示框在显示一定时间后会自己主动消失?由于在Android系统中有一个Toast队列,系统会依次从这个队列中取出一个Toast,并显示它。在显示了指定时间之后,便关闭它。那么可不能够让Toast信息提示框一直显示呢?这个要求对于Toast来说有点强人所难了,由于,Toast本身并没有提供这个功能。那么怎么才干让Toast一直显示,并在我们的控制之下关闭呢?代码是死的,人是活的。以下就叫代码说话:
看一下Toast的show方法的源代码:
public void show() { if (mNextView == null) { throw new RuntimeException("setView must have been called"); } INotificationManager service = getService(); String pkg = mContext.getPackageName(); TN tn = mTN; tn.mNextView = mNextView; try { service.enqueueToast(pkg, tn, mDuration); } catch (RemoteException e) { // Empty } }
在上面的代码中Toast已经告诉我们了,它本身并不负责信息提示框的显示与关闭,它仅仅是将Toast增加到系统的Toast队列中,再由系统依据Toast队列来显示和关闭Toast信息提示框。如今我们能够做一个大胆的判断,既然Toast的show方法是将Toast放到系统的Toast队列中,那么我们就不使用show方法,我们自己来控制Toast的显示与关闭。
查看Toast类源代码能够找到一个TN类,该类是Toast的一个内嵌类。在TN类中有个show方法,系统是从Toast队列中获得Toast对象之后,利用TN对象的show方法显示Toast再利用TN.hide方法关闭Toast。假设我们能够获取TN对象那么就能控制Toast的显示与关闭。但TN被声明成private,外部无法訪问。只是Toast类中有个mTN对象,尽管它不是我public但我们能够通过Java反射技术来訪问该对象。mTN会在创建Toast对象时初始化。所以,仅仅要获得mTN对象也就获得了TN对象。以下代码显示了一个永不关闭的Toast信息提示框。
Toast toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT); //设置Toast的显示位置 toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0); try { //通过反射技术,从toast对象中获取mTN对象 Field field = toast.getClass().getDeclaredField("mTN"); field.setAccessible(true); obj = field.get(toast); //从TN对象中获得show方法 Method method = obj.getClass().getDeclaredMethod("show", null); //调用TN对象的show方法来显示Toast信息提示框 method.invoke(obj, null); } catch (Exception e) { }
上面代码先通过事先创建好的Toast对象获得mTN对象,然后在利用反射技术获得TN对象的show方法。
关闭Toast的方法和显示Toast的方法类似,仅仅须要获得hide方法就可以。
Method method = obj.getClass().getDeclaredMethod("hide", null); method.invoke(obj, null);
程序执行效果图:
原文:http://www.cnblogs.com/mengfanrong/p/4244986.html
内容总结
以上是互联网集市为您收集整理的Android开发之控制Toast的开启与关闭全部内容,希望文章能够帮你解决Android开发之控制Toast的开启与关闭所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。