3月26日追加:
完全自己实现Toast效果,信息由windowManager直接绘在屏幕上
用Handler延时取消
和系统Toast已经无任何关联了。。。。
注意 必须获得当前Activity的context对象 ApplicationContext/Service不可使用
appwidget中不可使用
package xxxxx;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
importxxxxxx;
/**
*
* @author DK App内所有Toast均使用本类管理 每个触发的Toast都会显示 *
* 不存在延迟Toast现象
*/
public class ToastUtil {
static TextView tv;
static WindowManager mWindowManager;
public static void showMessage(final Context act, final String msg) {
showMessage(act, msg, Toast.LENGTH_SHORT);
}
public static void showMessage(final Context act, final int msg) {
showMessage(act, act.getString(msg), Toast.LENGTH_SHORT);
}
public static void showMessage(Context context, String msg, int Length) {
mWindowManager=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if(tv==null)
{
tv = new TextView(context);
tv.setTextSize(24);
tv.setTextColor(0xff000000);
tv.setBackgroundResource(R.drawable.bg_appwidget_toast);
tv.setPadding(5, 5, 5, 5);
}
tv.setText(msg);
if (tv.getParent() == null) {
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.gravity = Gravity.BOTTOM;
params.alpha = 0.85f;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.format = PixelFormat.TRANSLUCENT;
params.verticalMargin=0.2f;
params.windowAnimations = 0;
mWindowManager.addView(tv, params);
handler.sendEmptyMessageDelayed(101, 2000);
} else {
handler.removeMessages(101);
handler.sendEmptyMessageDelayed(101, 2000);
}
}
static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (tv.getParent() != null)
mWindowManager.removeView(tv);
}
};
public static void cancelCurrentToast() {
if (tv != null && tv.getParent() != null) {
mWindowManager.removeView(tv);
}
}
}
分享到:
相关推荐
最近在开发中我们经常会在适配5.0以后的机型遇到各种各样的问题,其中有一个不大不小的问题就是:Toast不显示问题,这篇文章就给大家总结了Android 5.0以上Toast不显示的原因与解决方法,有需要的朋友们可以参考借鉴...
小米mimu系统,会对toast进行拦截,在用户提交的toast 消息体拼接一个前缀,由于该种会导致插件工程出现资源错乱,获取appLabel异常,现我们通过hook 动态代理,对消息发送做一个劫持,修改消息信息,还原原来的消息
全局Toast工具类,作用:连续显示toast提示时取消上一个toast 通过ToastUtil.toast(Context(), "文本")调用
主要为大家详细介绍了android自定义Toast设定显示时间,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一个简单的自定义Toast资源,您可以根据自己的需要更改我的代码即可实现您想要的效果(主要是更改xml文件的布局),这是androidstudio的项目,但是不妨碍在eclipse中使用,可以直接在eclipse中新建android项目,然后将...
React Native Toast 一个用于android和ios类似于android toast提示控件,android使用原生toast, ios使用UIView Toast
Android Toast 自定义背景、图片 随心使用
android 解决Toast重复显示问题!
默认的toast很丑,而且也没有真正提供显示短暂消息的功能。这个库能为toast显示动画反馈,显示到选择按钮或者删除按钮的过度动画。而且toast 的生命周期是自定义的。
本文实例讲述了Android Service中使用Toast无法正常显示问题的解决方法。分享给大家供大家参考,具体如下: 在做Service简单练习时,在Service中的OnCreate、OnStart、OnDestroy三个方法中都像在Activity中同样的...
自己整理的自定义控件方法,看了你就会做自定义Dialog和Toast了,没有多余代码,很简洁。背景、按钮都能自定义
Android中实现带声音提示的Toast (自定义扩展Toast)
最近项目中出现一个问题,就是有的手机在关闭系统通知,结果项目中使用的原生Toast在有的手机上竟然不显示了,然后就去查系统源码,发现原来原生的Toast是基于NotificaitionManagerService实现的,难怪有些手机不...
Android学习笔记之Button,Toast,menu的简单用法
Android Toast 工具类
自定义Toast,解决系统Toast存在的问题
Demo android service toast 第一个版本
android中Toast和Notification的应用.
Android中自定义Toast背景颜色及字体颜色,防止Toast多次创建的ToastUtil,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/68962539