有人可以帮助我获取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)。
我需要它保持在所有其他窗口之上,因为我需要在所有窗口上绘制图像而不会中断运动事件。
答案 0 :(得分:0)
嗯,从文档中说:
TYPE_SYSTEM_ALERT - 窗口类型:系统窗口,如低功耗 警报。这些窗口始终位于应用程序窗口的顶部。在 多用户系统仅在拥有用户的窗口中显示。
我对此进行了一些测试,这意味着视图显示在几乎所有内容之上(包括自Android 6.0以来的权限对话框) - 导致它们失去焦点。键盘保护层仍然位于顶部。是的,您可能会丢失视图中的focusable
属性,但您可能会处理触摸侦听器中的所有内容。例如,请看一下这篇文章:How to use View.OnTouchListener instead of onClick