将窗口叠加层上的触摸事件传递给它后面的活动

时间:2015-11-13 16:26:58

标签: java android android-layout android-windowmanager

某些背景。
我有一个与WindowManager一起添加的RelativeLayout,类型为TYPE_SISTEM_ALERT,标志为FLAG_NOT_TOUCH_MODAL FLAG_WATCH_OUTSIDE_TOUCH
我可以在这个RelativeLayout上或者在“后面”的活动中获得触摸事件,但只要它不是“RelativeLayout window”的一部分就添加了。

enter image description here *黑条是我的RelativeLayout上的视图;
*红色矩形是此RelativeLayout的整个容器;
*黄色的星星是从黑色视图中创建的空间点;
*空格是此RelativeLayout窗口背后的活动。

想象一下,在活动A的黄色星点上有一个按钮,但对用户来说是可见的,如果他点击那里。
活动A的按钮应该能够响应,即使它在这个RelativeLayout窗口的“后面”。

我的推荐,但遗憾的是到目前为止没有成功:

  1. Android overlay to grab ALL touch, and pass them on?
  2. Android : Multi touch and TYPE_SYSTEM_OVERLAY
  3. 这有解决方法吗?

1 个答案:

答案 0 :(得分:1)

  

这有解决方法吗?

如果相关活动是您自己的活动,请删除系统级叠加层并在您自己的视图层次结构中实施叠加层。

如果有问题的活动不是您自己的活动,那么AFAIK无法实现您想要的活动。 Android中的Windows,至少目前是纯粹的矩形;我知道您无法将窗口设置为非矩形,并且活动确实是这些透明区域中最顶级的项目。并且,出于安全原因(tapjacking攻击),自Android 4.0以来,传递触摸事件已被阻止。