Android6.0之前 PopupWindow点击外部不消失
/**
*
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* .' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 佛祖保佑 永无BUG
*
*
*
* 十年生死两茫茫,写程序,到天亮。
* 千行代码,Bug何处藏。
* 纵使上线又怎样,朝令改,夕断肠。
*
* 领导每天新想法,天天改,日日忙。
* 相顾无言,惟有泪千行。
* 每晚灯火阑珊处,夜难寐,加班狂。
*/
老规矩,解决办法在最后
因为项目用户有一部分为Android5.0所以调试的时候会连带5.0一起测试
然后就有这么一个弹窗,发现6.0以下的手机PopupWindow点击外部不会消失,点击物理返回键也无反应
正常来说设置setOutsideTouchable即可
//设置此参数获得焦点
mPopupWindow.setFocusable(true);
// 设置点击窗口外边窗口消失
mPopupWindow.setOutsideTouchable(true);`
-
Run 一下
- o(  ̄▽ ̄)o 毫无反应…
通过大佬博客知道了
在Android 6.0之前的preparePopup方法中,在mBackgroud不为null的情况下,包装了一个PopupViewContainer ,在PopupViewContainer里面处理的事件分发。
而在Android 6.0以上,在这里更改了,在createDecorView这个方法里做了统一处理,也就是不管mBackgroud为null或者不为null,都会走到这个方法,这也就是为什么在Android 6.0以上不用调用seteBackgroudDrawable方法也可以点击外部dismiss的原因
大佬博客指路:从源码剖析PopupWindow 兼容Android 6.0以上版本点击外部不消失
添加代码
Drawable baseDrawable = getResources().getDrawable(R.color.color00000000);
mPopupWindow.setBackgroundDrawable(baseDrawable);
-
Run 一下
- o(  ̄▽ ̄)o 解决 保存一下,写下博客,以后方便ctrl + c
- o(  ̄▽ ̄)o