悬浮窗实现传统方案
对于传统悬浮窗和一些古老的“黑科技”悬浮窗的实现,想必已经有很多成熟的案例了,实现策略基本为以下两种:
TYPE_SYSTEM_ALERT类型
mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams() layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
需要权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses>
TYPE_TOAST / TYPE_PHONE 类型
7.1.1以下不需要权限声明,在魅族、华为、小米等机型上默认隐藏,需要引导用户打开悬浮窗。
传统方案的问题
第一种方案因为存在各种限制,不能被众多开发采纳,故而比较流行的悬浮窗实现方式是第二种。
但是,我们有自己的原则:
不能接受7.1.1以上机型,使用第二种方式实现悬浮窗仍需要用户主动授予权限的操作?
不能接受在魅族、华为、小米等机型上默认隐藏,需要引导用户打开悬浮窗,就像这样
[站外图片上传中...(image-18b632-1541251502358)]
功能
应用内显示,无需申请任何权限
应用内显示,所有机型都可以默认显示悬浮窗,无需引导用户做更多设置
支持拖拽
超出屏幕限制移动
可自动吸附到屏幕边缘
使用规则
在基类Activity(注意必须是基类Activity)中的onStart和onStop添加如下代码
@Override protected void onStart() { super.onStart(); FloatingViewManager.getInstance().attach(this); } @Override protected void onStop() { super.onStop(); FloatingViewManager.getInstance().detach(this); }
展示悬浮窗
FloatingViewManager.getInstance().add(getApplicationContext());
销毁悬浮窗
FloatingViewManager.getInstance().remove();
附上Github链接:
https://github.com/leotyndale/EnFloatingView
效果图
作者:李良逸
链接:https://www.jianshu.com/p/6c10b6bf14af