浮动窗体

1.实现思路

通过WM.addView()方式

2.实现步骤

2.1 获取WM对象
WindowManager mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
2.2 创建View
View mFloatingContentView = LayoutInflater.from(this).inflate(R.layout.float_content,null);
//查找控件
TextView txtView = mFaceDetectView.findViewById(R.id.floating_textview);
2.3 设置布局参数
//创建LayoutParams对象,WindowManager.LayoutParams为ViewGroup.LayoutParams的子类
WindowManager.LayoutParams mFloatingLayoutParams = new WindowManager.LayoutParams();
// 设置Window Type
// TYPE_SYSTEM_OVERLAY 系统顶层窗口。显示在其他一切内容之上。此窗口不能获得输入焦点,否则影响锁屏。
//mFloatingLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
// 设置悬浮框不可触摸
// mFloatingLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
// | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

//TYPE_APPLICATION_OVERLAY--所有应用之上,状态栏、输入法等系统window之下
mFloatingLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
mFloatingLayoutParams.format = PixelFormat.RGBA_8888;
// 设置悬浮框的宽高
mFloatingLayoutParams.width = 200;
mFloatingLayoutParams.height = 120;
mFloatingLayoutParams.gravity = Gravity.CENTER;
mFloatingLayoutParams.x = 0;
mFloatingLayoutParams.y = 0;
2.4 WM.addView
mWindowManager.addView(mFloatingContentView,mFloatingLayoutParams);
2.5 mainfest申请权限
<!-- 显示顶层浮窗 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2.6 高版本动态权限申请(略)

3.扩展

WindowManager.LayoutParams的type部分取值

- WindowManager.LayoutParams.TYPE_SYSTEM_ALERT 类似低电量弹框,在应用之上
- WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY android o或之上版本推荐使用

参考资料

安卓:许可被拒绝窗式2038使用TYPE_APPLICATION_OVERLAY

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容