Android 11 SYSTEM_ALERT_WINDOW行为随SurfaceView更改

huwehgph  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(168)

bounty将在6天内到期。回答此问题可获得+300声望奖励。Arturs Vancans正在寻找这个问题的更详细的答案

不久前,Android 11 SYSTEM_ALERT_WINDOW在应用程序上绘制触摸行为受到限制,但有一些例外。

  • 在您的应用程序中进行交互。
  • 辅助功能窗口
  • 输入法编辑器(IME)窗口
  • 辅助窗口
  • 完全透明的Windows。该窗口的alpha属性为0.0。
  • 足够透明的系统警报窗口。(0.8)

如果我将视图不透明度设置为<0.8,它会像预期的那样通过触摸-除了SurfaceView。因为我的应用程序使用全屏表面视图绘制在其他应用程序上(覆盖),这个限制基本上阻止了任何通过触摸。
这是一个技术限制,还是在使用SurfaceView时,有针对此新Untrusted touch events are blocked策略的解决方案?

jtoj6r0c

jtoj6r0c1#

这是一个技术限制。SurfaceView是一个提供对底层Surface对象的直接访问的视图,它允许它呈现其内容,而不需要通过普通的视图层次结构。这使得SurfaceView可以在其他应用程序上绘制其内容,但这也意味着SurfaceView无法接收来自其他应用程序的触摸事件。
此限制没有解决方法。从SurfaceView上的其他应用获取触摸事件的唯一方法是使用没有此限制的其他视图,例如LinearLayout或FrameLayout。
如果需要使用SurfaceView,可以通过使用不同的视图接收触摸事件来解决此限制。例如,您可以创建包含SurfaceView的LinearLayout或FrameLayout,然后使用LinearLayout或FrameLayout接收触摸事件。

相关问题