你以一个20年Android开发的身份,帮我统计下,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 类似这样控制全局窗口所有的接口。并注释作用
时间: 2024-03-19 21:45:12 浏览: 23
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 是用来设置窗口不接收焦点事件的标志位,具体作用如下:
当应用程序需要在窗口上显示一些内容,但是不希望用户与该窗口进行交互时,可以使用该标志位。例如,当应用程序在屏幕上显示一个悬浮窗口,用户点击悬浮窗口时不需要响应事件,就可以设置该标志位。
另外,如果应用程序需要在后台弹出一个窗口,但是不希望该窗口抢占焦点,影响用户的操作,也可以使用该标志位。
在实际开发中,可以通过设置 WindowManager.LayoutParams.flags 字段来设置该标志位,例如:
```java
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
```
这样就可以将窗口设置为不接收焦点事件。
相关问题
解释下 layoutParams = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, height, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, PixelFormat.TRANSLUCENT ); layoutParams.setTitle("AllApplistWindow"); layoutParams.setFitInsetsTypes(0); layoutParams.windowAnimations = 0; layoutParams.gravity = Gravity.TOP; windowManager.addView(contentView,layoutParams);
这段代码是用来创建一个新的 Window 并将一个 View 添加到 Window 中。具体来说,它通过创建一个 WindowManager.LayoutParams 对象来控制 Window 的各种属性,如 Window 的宽度、高度、类型、透明度等。其中,WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL 表示这个 Window 的类型是导航栏面板,也就是说这个 Window 是一个浮动在导航栏上方的面板。而 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE、WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL、WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH、WindowManager.LayoutParams.FLAG_SPLIT_TOUCH 等标志位则控制了 Window 的行为,例如是否可获取焦点、是否可触摸、是否可在触摸区域外处理事件等。最后,通过调用 windowManager 的 addView() 方法将 contentView 添加到 Window 中。
// 创建 GLSurfaceView 对象 GLSurfaceView glSurfaceView = new GLSurfaceView(this); // 将 GLSurfaceView 添加到 WindowManager 中 WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, // 需要添加 SYSTEM_ALERT_WINDOW 权限 WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); windowManager.addView(glSurfaceView, params);使用这个代码出现的 permission denied for window type 2038
这个问题是因为你使用了 `TYPE_APPLICATION_OVERLAY` 权限,而这个权限需要在应用的 `AndroidManifest.xml` 文件中添加 `android.permission.SYSTEM_ALERT_WINDOW` 权限声明。你可以尝试在 `AndroidManifest.xml` 文件中添加以下内容:
```
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
```
如果已经添加了这个权限声明并且仍然出现 `permission denied for window type 2038` 错误,那么可能是因为你的应用没有获取到这个权限。你可以在应用启动时请求这个权限,具体方法可以参考 Google 官方文档。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)