android如何实现弹窗在悬浮窗之下以及弹窗在新弹出的弹窗之下
时间: 2024-03-31 16:33:56 浏览: 103
要在 Android 中实现弹窗在悬浮窗之下或者弹窗在新弹出的弹窗之下,您可以使用 WindowManager.LayoutParams 类的 flags 属性来设置窗口类型。
1. 弹窗在悬浮窗之下
如果您希望弹窗位于悬浮窗之下,您可以将 WindowManager.LayoutParams 类的 flags 属性设置为 FLAG_NOT_FOCUSABLE 和 FLAG_NOT_TOUCH_MODAL。
```java
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
```
2. 弹窗在新弹出的弹窗之下
如果您希望弹窗位于新弹出的弹窗之下,您可以将 WindowManager.LayoutParams 类的 flags 属性设置为 FLAG_NOT_FOCUSABLE、FLAG_NOT_TOUCH_MODAL 和 FLAG_WATCH_OUTSIDE_TOUCH。
```java
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
```
在这种情况下,您需要在弹出的弹窗中添加 FLAG_NOT_FOCUSABLE 和 FLAG_NOT_TOUCH_MODAL 标志,以确保它们不会干扰您的弹窗。例如:
```java
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
```
注意:使用 WindowManager.LayoutParams 类的 flags 属性需要您的应用程序具有 SYSTEM_ALERT_WINDOW 权限。为了避免安全风险,您需要在 Android 6.0 及更高版本中请求此权限,并且用户必须授予此权限才能使用该功能。
阅读全文