开发这个程序之前先解释一下,为什么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);

程序执行效果图:

Android开发之控制Toast的开启与关闭的更多相关文章

  1. Android中如何监听GPS开启和关闭

    转自 chenming 原文 Android中如何监听GPS开启和关闭   摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...

  2. nRF51822之app_button控制uart的开启和关闭

    为什么要使用app_button来控制uart的开启和关闭 还是先上datesheet中uart开启的时候需要HFCLK,需要消耗大量大电流.所以在我们需要的时候需要通过io来通知nrf51822开启 ...

  3. Android开发之自定义Toast(带详细注释)

    因为工作需求,所以自己研究了自定义Toast,这里做出总结: 在此之前有一点需要提前说明:Toast与其他组件一样,都属于UI界面中的内容,因此在子线程中无法使用Toast弹出提示内容,如果强行在子线 ...

  4. Android开发之控制摄像头拍照

    如今的手机一般都会提供相机功能,有些相机的镜头甚至支持1300万以上像素,有些甚至支持独立对焦.光学变焦这些仅仅有单反才有的功能,甚至有些手机直接宣传能够拍到星星.能够说手机已经变成了专业数码相机.为 ...

  5. Android开发之控制手机音频

    本实例通过MediaPlayer播放一首音乐并通过AudioManager控制手机音频.关于AudioManager的具体解释可參照:Android开发之AudioManager(音频管理器)具体解释 ...

  6. Android开发UI之Toast的使用

    Toast,A toast provides simple feedback about an operation in a small popup. 对于操作提供一个简单反馈信息. 官网链接:htt ...

  7. Android开发_控制硬加速hardwareAccelerated

    控制硬加速 hardwareAccelerated也是一种优化的手段 从Android3.0 (API level11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承 ...

  8. 吴裕雄--天生自然Android开发学习:魅蓝3开启USB调试

    打开手机点击:设置 选择:关于手机 在详情里面找到:版本号,然后不断地点击那个版本号. 然后返回一步 再选择设置里面的:辅助功能 再选择辅助功能里面的:开发者选项 进入开发者选项后,选择打开两项:一是 ...

  9. 通过gpio控制一个进程开启或关闭

    目标: 板子上有个进程需要通过读取gpio的值, 当gpio值为1 时, 开启指定的进程,当gpio为0时, 杀掉这个指定的进程. #include <stdio.h> int main( ...

随机推荐

  1. vector和list删除元素

    #include <iostream> #include <vector> #include <list> using namespace std; int mai ...

  2. SpringMVC+Mybatis(SMM)+mybatis-generate

    java搭建 SpringMVC+Mybatis(SMM)+mybatis-generate 搭建SSM系统,首先要了解整个过程: 1.创建spring-mvc项目 2.在maven中添加要引用的ja ...

  3. Spark SQL 源代码分析系列

    从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...

  4. 站点系统压力測试Jmeter+Badboy

    近期项目须要压力測试,因此搜了几款试用,首选的是LoadRunner这款大名鼎鼎的測试软件: LoadRunner11 下载请猛戳这里 传送门LoadRunner破解文件 下载请猛戳这里 传送门Loa ...

  5. spring常规任务(轻便易)

    spring提供了定时任务功能.我们不需要第三者jar包支持.spring够了. 代码: package com.inth.product.web.task; import java.util.Dat ...

  6. [Android 4.4.4] 泛泰A870 通过刷第三版 Mokee4.4.4 KTU84P 20140626 RC2.1 by syhost

    主题及注意事项请访问以前的版本: http://blog.csdn.net/syhost/article/details/29931291 此RC2.1版比RC2.0改进的地方: 1. Mokee本身 ...

  7. 1002. 写这个号码 (20)(数学啊 ZJU_PAT)

    主题链接:http://pat.zju.edu.cn/contests/pat-b-practise/1002 读入一个自然数n,计算其各位数字之和.用汉语拼音写出和的每一位数字. 输入格式:每一个測 ...

  8. Html5用Canvas制作画图板

    需求: 绘制多边形 可填充颜色 可设置文字 可移动,可删除 鼠标按住后,抬起之前线段应该尾随鼠标当前位置 可与后台方便的进行数据交互,保存到后台,或将数据从后台取到前台显示对应的图形 思考: 第一想到 ...

  9. POJ 2756 Autumn is a Genius 采用string大数减法

    标题意味着小神童.加减可以计算. 只是说这个小神童的学科知识,究竟有多神,自己给自己找. 最后,因为数据是非常非常巨大的,我听说关闭50k结束了50000数字总和,可以想见他神教. 这似乎也是考试题目 ...

  10. 开发随笔——NOT IN vs NOT EXISTS

    原文:开发随笔--NOT IN vs NOT EXISTS 原文出处: http://blog.csdn.net/dba_huangzj/article/details/31374037  转载请引用 ...