美文网首页
浮动窗体

浮动窗体

作者: 败家的猫 | 来源:发表于2020-03-13 18:55 被阅读0次

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

相关文章

网友评论

      本文标题:浮动窗体

      本文链接:https://www.haomeiwen.com/subject/todijhtx.html