参考出处:http://www.cnblogs.com/net168/p/4237528.html

(会出现窗体泄漏has leaked window) 避免在线程中removeView

public class MyToast {    boolean mShowTime;    boolean mIsShow;    WindowManager mWdm;    Timer mTimer;    View mToastView;    WindowManager.LayoutParams mParams;    public MyToast(Context context, String text, boolean showTime) {        mShowTime = showTime;//记录Toast的显示长短类型        mIsShow = false;//记录当前Toast的内容是否已经在显示        mWdm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        mToastView = Toast.makeText(context, text, Toast.LENGTH_SHORT).getView();//通过Toast实例获取当前android系统的默认Toast的View布局        mTimer = new Timer();        setParams();    }    /**     * 设置布局参数     */    private void setParams() {        mParams = new WindowManager.LayoutParams();        mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;        mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;        mParams.format = PixelFormat.TRANSLUCENT;        mParams.windowAnimations = R.style.anim_view;//设置进入退出动画效果        mParams.type = WindowManager.LayoutParams.TYPE_TOAST;        mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;        mParams.gravity = Gravity.BOTTOM;//位置        mParams.y = 50;    }    public static MyToast makeText(Context context, String text, boolean showTime) {        MyToast result = new MyToast(context, text, showTime);        return result;    }    /**     * 此处修改 以免造成窗体泄漏     */    public void show() {        if (!mIsShow) {            mIsShow = true;            mWdm.addView(mToastView, mParams);            mTimer.schedule(new TimerTask() {                @Override                public void run() {                    mHandler.sendEmptyMessage(1);                }            }, (long) (mShowTime ? 1500 : 1500));        }    }    Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            mWdm.removeViewImmediate(mToastView);            mIsShow = false;            super.handleMessage(msg);        }    };}


更多相关文章

  1. Android五大布局详解及属性
  2. Android 控件布局实现卡片效果,阴影效果
  3. Android 键盘布局总结
  4. Android 开发 之 折叠布局(CollapsingToolbarLayout)
  5. Android开发中布局属性的使用汇总
  6. Android 处理多线程 UserTask

随机推荐

  1. 使用Javascript / jQuery的/ CSS。如何在
  2. 根据循环中的i改变函数中的参数
  3. [JS]小数部分处理
  4. iPhone的网站主题 - 什么是基本成分?
  5. 如何在bing地图中添加信息框到一个航点
  6. 函数的作用是:在javascript中将时间戳转
  7. Vue自定义指令实现checkbox全选功能
  8. 多种方法用javascript输出黑白棋
  9. javascript 动态数组的使用
  10. 检查重复项后使用insertbefore()