在网上找到一段显示不会关闭的Toast的代码,是使用Java的反射机制实现的,在Android2.3中可以实现,但是在Android3.0中不起作用,这是为什么呢?
// 先创建一个Toast对象
Toast toast = Toast.makeText(this, "永不关闭的Toast", Toast.LENGTH_LONG);
// 设置Toast信息提示框显示的位置(在屏幕顶部水平居中显示)
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
try
{
// 从Toast对象中获得mTN变量
Field field = toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
Object obj = field.get(toast);
// TN对象中获得了show方法
Method method = obj.getClass().getDeclaredMethod("show", null);
// 调用show方法来显示Toast信息提示框
method.invoke(obj, null);
}
catch (Exception e)
{
}
// 先创建一个Toast对象
Toast toast = Toast.makeText(this, "永不关闭的Toast", Toast.LENGTH_LONG);
// 设置Toast信息提示框显示的位置(在屏幕顶部水平居中显示)
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
try
{
// 从Toast对象中获得mTN变量
Field field = toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
Object obj = field.get(toast);
// TN对象中获得了show方法
Method method = obj.getClass().getDeclaredMethod("show", null);
// 调用show方法来显示Toast信息提示框
method.invoke(obj, null);
}
catch (Exception e)
{
}
要保持版本的兼容性最好别用反射。
TN类的属性在新版本里变为static了,不确定跟这个有没有关系。
希望有人能给出答案~