4

有人可以帮我获得 WindowManager.LayoutParams 组合,该组合可以将事件传递给 TYPE_SYSTEM_ALERT 或类似覆盖类型(位于每个其他窗口的顶部)下的图层。

问题: 我的问题是当窗口类型 TYPE_SYSTEM_ALERT 获得焦点时,它停止将运动事件传递给它下面的其他应用程序。

示例代码

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
        WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
        PixelFormat.TRANSLUCENT);

要求: 我需要获得 TYPE_SYSTEM_ALERT 或类似的覆盖类型,它们位于每个其他窗口的顶部,并且还获取运动事件以及将运动事件传递到顶层下的任何覆盖(可能是 TYPE_SYSTEM_ALERT)。

我需要它保持在所有其他窗口的顶部,因为我需要在所有窗口的顶部绘制图像而不中断运动事件。

4

1 回答 1

0

好吧,从文档中它说:

TYPE_SYSTEM_ALERT - 窗口类型:系统窗口,例如低电量警报。这些窗口始终位于应用程序窗口之上。在多用户系统中,仅在拥有用户的窗口上显示。

链接在这里:https ://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT

我对此进行了一些测试,这意味着视图显示在几乎所有内容之上(包括自 Android 6.0 以来的权限对话框)——导致它们失去焦点。Keyguard 层仍然位于顶部。是的,您可能会丢失focusable视图的属性,但您可能会处理触摸侦听器中的所有内容。例如,看看这篇文章:如何使用 View.OnTouchListener 而不是 onClick

于 2016-10-27T11:41:30.373 回答