使用WindowManager addView来显示一个窗口,响应返回按钮小技巧
来源:互联网 发布:2004全明星新秀赛数据 编辑:程序博客网 时间:2024/04/28 13:07
今天在做公司的广告sdk的启动页广告的时候,使用windowmanager来显示一个view在最上层,之前都是定时消失的,后来无意中发现按返回按钮都没有消失,于是开始找解决方法。
首先想起心里天气通有类试的功能,于是反编译看其代码,里面实现的方式是 setOnKeyListener()把自己的监听器传递进去来处理,这个方法也是最容易想到的,其是可以解决部分情况,如当addview中的view是view的直接子类的时候,都没有问题,若自定义的view或者textview之类的,但是加入放入的是viewgroup的子类(我放入的是自定义的viewgroup)就没有响应到。
其次,解决问题是思路是:我们开发的时候要经常对touch event进行拦截,所以我们也容易联系到android中惯用的方式,那就是先dispach再on开头的生命周期方法,如dispachDraw() --> onDraw();所以key event也应该会有一样的方法,所以就要重写dispatchKeyEvent()对back按键拦截处理,然后在重写setOnKeyListener拿到我们设的onKeyLIstener,这样就可以解决上面提到的viewgroup无法实现的功能(该思路针对的是初学者,对android还不熟悉的朋友提供的,若是经验多一点的开发者不想也都知道的了)
最后代码是:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
Log.d(TAG, "dispatchKeyEvent " + event.getKeyCode());
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if (mOnKeyListener != null) {
mOnKeyListener.onKey(this, KeyEvent.KEYCODE_BACK, event);
return true;
}
}
return super.dispatchKeyEvent(event);
}
OnKeyListener mOnKeyListener = null;
@Override
public void setOnKeyListener(OnKeyListener l) {
// TODO Auto-generated method stub
this.mOnKeyListener = l;
}
- 使用WindowManager addView来显示一个窗口,响应返回按钮小技巧
- 使用WindowManager.addView()方法增加的悬浮窗口,如何固定屏幕显示方向?
- 使用WindowManager.addView()模拟直播软件悬浮窗口播放视频
- 使用WindowManager.addView()模拟直播软件悬浮窗口播放视频
- WindowManager addView
- 关于WindowManager.addView() 不显示添加的View的问题!
- 【小技巧】Android返回按钮的监听器
- android WindowManager addView Demo
- 小米手机无法使用WindowManager的addView,怎么解决
- 102.使用WindowManager在窗口上显示view
- 一个javascript小技巧:在webForm中接收回车后激发一个按钮的服务器端响应事件
- [转]一个javascript小技巧:在webForm中接收回车后激发一个按钮的服务器端响应事件
- vc开发的窗口显示小技巧
- 小技巧:一个工具条内放多排按钮
- Android 在窗口的最前端添加TextView--windowManager.addView(textView, layoutParams)
- windowManager.addView()抛出WindowManager$InvalidDisplayException异常
- 关于WindowManager.addview()的问题
- 关于WindowManager.addview()的问题
- poj 3615 Cow Hurdles
- sql 递归算法
- js重定向---实现页面跳转的几种方式
- Android Notification 使用详解之四:由后台服务向Activity发送进度信息
- Spring Data简介
- 使用WindowManager addView来显示一个窗口,响应返回按钮小技巧
- java中的char解析和类型变量大小
- yum 配置
- 彻底屏蔽linux启动打印信息
- 怎么去掉ECShop购物流程中收货人电子邮箱必填
- 不想上班啊不想上班
- 1602LCM液晶模块显示
- 用正则表达式将前后空格用空字符串替代:replace(/(^\s*)|(\s*$)/g, "")
- 2013年阿里巴巴实习生招聘测试开发工程师一面