WindowManager.LayoutParams组合,可以将事件传递给TYPE_SYSTEM_ALERT或类似的图层

时间:2013-03-28 10:44:55

标签: android layoutparams motionevent android-windowmanager

有人可以帮助我获取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)。

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

1 个答案:

答案 0 :(得分:0)

嗯,从文档中说:

  

TYPE_SYSTEM_ALERT - 窗口类型:系统窗口,如低功耗   警报。这些窗口始终位于应用程序窗口的顶部。在   多用户系统仅在拥有用户的窗口中显示。

此处链接:https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT

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