Java 如何使overlay在不使用其他应用程序的触摸功能的情况下接收触摸事件?
我目前正在尝试制作一个类似于Facebook Messenger聊天头的实用程序覆盖,你可以在屏幕上移动视图。单击视图时,视图将展开为更复杂的布局。但是,问题是如果我将LayoutParams的标志设置为WindowManager.LayoutParams.flag_NOT_TOUCHABLE,则后面的应用程序会接收触摸事件,而我的覆盖层根本不会接收任何触摸事件。但是,如果我移除该标志,覆盖层将接收触摸,但它会阻止触摸。这意味着我甚至无法打开应用程序抽屉,因为触摸被阻止 我使用一个全屏透明的活动作为背景,这样我就可以在它周围移动我的覆盖“小部件”Java 如何使overlay在不使用其他应用程序的触摸功能的情况下接收触摸事件?,java,android,kotlin,Java,Android,Kotlin,我目前正在尝试制作一个类似于Facebook Messenger聊天头的实用程序覆盖,你可以在屏幕上移动视图。单击视图时,视图将展开为更复杂的布局。但是,问题是如果我将LayoutParams的标志设置为WindowManager.LayoutParams.flag_NOT_TOUCHABLE,则后面的应用程序会接收触摸事件,而我的覆盖层根本不会接收任何触摸事件。但是,如果我移除该标志,覆盖层将接收触摸,但它会阻止触摸。这意味着我甚至无法打开应用程序抽屉,因为触摸被阻止 我使用一个全屏透明的活动
有没有什么方法可以让它不会阻止触摸事件。即使我没有将其设置为全屏,只要我没有“不可触摸”标志,我的覆盖将完全阻止所有屏幕触摸。请删除此标志
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
用这面旗
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
请参阅此链接它不适用于透明活动。气泡的实现方式(在Android Q中出现之前)是将视图直接附加到
WindowManager
。请参阅,每个功能中都会出现一次触摸,以覆盖某些触摸事件。它从顶层开始,一直走到底层。如果要阻止触摸,可以使用return false在这些函数中的任何一个函数中都可以使用code>。如果不想阻止它,请使用返回true代码>在这些函数中。@kenny_k那么如果我将视图直接附加到WindowManager,我仍然能够移动它吗?顺便说一下,问题仍然存在。我放弃了全屏透明活动,但仍然得到了相同的结果。这就是我制作布局参数的方法:WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_父项,ViewGroup.LayoutParams.MATCH_父项,WindowManager.LayoutParams.TYPE_应用程序_覆盖,WindowManager.LayoutParams.FLAG_不可触摸,像素格式.半透明)我想你应该删除WindowManager.LayoutParams.FLAG\u NOT\u TOUCHABLE
——因为这样,它显然是不可触摸的。因为你不再有任何活动,任何超出你视野的触摸事件都将由触摸之下的任何东西来处理。@kenny_k同样的结果。如果我删除不可触摸标志,视图将变为可点击,但下面的应用程序无法再次接收触摸事件