项目需要一个悬浮窗,但是只是在应用内显示,所以写了一个弱化的悬浮窗;
1.使用Acitvity的Context来初始化的WindowManager;
2.使用windowmanager.addview将自定义的View来直接在根布局上添加一层布局,根部局是FrameLayout所以会显示在最上层;
3.自定义view继承linearlayout(这是我的,你可以随意),view的布局用xml定义的,然后用layoutinflater.(layout,root)引入,用this做root即可绑定在一起;
4.在自定义view中重写ontouch事件,实现跟随手指移动;
自定义View类,View管理类,对外开放接口,便捷调用;
建议:
mWindowParams.type
不要使用,这样就只是对view的布局操作不算是系统承认的悬浮窗不用涉及到权限;
注意:具体的代码网上有很多,我的例子放到了自己的github上,此处只说注意的地方
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mWindowParams.gravity = Gravity.START | Gravity.TOP;
这两个属性一定要有,第一个还好说是为了不让悬浮窗霸占焦点用的,第二个就有点匪夷所思了,但是一定要有,不然在计算手指跟随的时候会出问题。