🔥应用内悬浮窗,无需一切权限,适配所有ROM和厂商,no permission floating view.
==========================
无需一切权限,不受各种国产ROM限制,默认可以显示的应用内悬浮窗。
对于传统悬浮窗和一些古老的“黑科技”悬浮窗的实现,想必已经有很多成熟的案例了,实现策略基本为以下两种:
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>
7.1.1以下不需要权限声明,在魅族、华为、小米等机型上默认隐藏,需要引导用户打开悬浮窗。
第一种方案因为存在各种限制,不能被众多开发采纳,故而比较流行的悬浮窗实现方式是第二种。
但是,我们有自己的原则:
1.在gralde的dependencies中加入
compile 'com.imuxuan:floatingview:1.6'
2.在基类Activity(注意必须是基类Activity)中的onStart和onStop(或者安卓原生ActivityLifeCycle监听)中添加如下代码
@Override
protected void onStart() {
super.onStart();
FloatingView.get().attach(this);
}
@Override
protected void onStop() {
super.onStop();
FloatingView.get().detach(this);
}
3.展示悬浮窗
FloatingView.get().add();
1.销毁悬浮窗
FloatingView.get().remove();
2.添加点击事件
FloatingView.get().listener(new MagnetViewListener() {
@Override
public void onRemove(FloatingMagnetView magnetView) {
Toast.makeText(TestActivity.this, "我没了", Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(FloatingMagnetView magnetView) {
Toast.makeText(TestActivity.this, "点到我了", Toast.LENGTH_SHORT).show();
}
});
3.获得悬浮窗View
FloatingView.get().getView();
4.设置悬浮窗icon
FloatingView.get().icon(R.drawable.XXXXX);
5.设置悬浮窗View
FloatingView.get().customView(new View());
or
FloatingView.get().customView(R.layout.XXXXX);
6.设置悬浮窗位置等布局参数
FloatingView.get().layoutParams(new ViewGroup.LayoutParams());
1.6
修复横竖屏切换错位 & 添加到布局时偶发崩溃
1.5
修复内存泄露问题
1.4
适配折叠屏
1.3
增加自定义layout等API
1.2
修复拖拽失效
1.1
点击监听问题处理
1.0
创建项目