目录
2、创建windowManager服务、windowManager Params配置项
一、效果展示
创建系统浮窗可拖动
二、代码实现
1、添加权限,动态申请权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
/**
* 判断当前是否有悬浮窗权限,有则显示浮窗,否则动态申请权限
*/
private void buildSystemFloating() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION
, Uri.parse("package:" + getPackageName())), OVERLAY_PERMISSION_REQUEST_CODE);
} else {
SystemFloatingManager.buildSystemFloatingWindow(getApplicationContext(), TEST_SYSTEM_FLOATING);
}
}
}
2、创建windowManager服务、windowManager Params配置项
权限申请成功后创建系统浮窗(创建及其显示隐藏的控制放在一个单独的manager里面),获取WindowManager的实例,创建WindowManager.LayoutParams的实例并配置其参数
WindowManager参数详情https://developer.android.com/reference/android/view/WindowManager.LayoutParams
WindowManager windowManager = (WindowManager) applicationContext.getSystemService(Context.WINDOW_SERVICE);
if (windowManager == null) {
Log.e(TAG, "buildSystemFloatingWindow but windowManager is null");
return;
}
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
layoutParams.format = PixelFormat.TRANSPARENT;
layoutParams.width = 300;
layoutParams.height = 300;
layoutParams.x = 150;
layoutParams.y = 150;
3、动态加载view,添加到windowManager中
View view = LayoutInflater.from(applicationContext).inflate(R.layout.layout_simple_floating, null);
if (view == null) {
Log.e(TAG, "buildSystemFloatingWindow but view is null");
return;
}
view.setOnTouchListener(new FloatingTouchListener(windowManager, layoutParams, new FloatingTouchListener.IFloatingDragListener() {
@Override
public void onFloatingClick() {
Toast.makeText(applicationContext, "系统浮窗触发了点击事件", Toast.LENGTH_SHORT).show();
}
@Override
public void onFloatingDrag() {
Toast.makeText(applicationContext, "系统浮窗触发了滑动事件", Toast.LENGTH_SHORT).show();
}
}, true));
windowManager.addView(view, layoutParams);
附上demo地址:SystemFloatingWinowDemo.zip_format=PixelFormat.TRANSPARENT-Android文档类资源-CSDN下载