ConstraintLayout从setOnClickListener窃取水龙头

时间:2019-05-18 04:34:19

标签: android kotlin android-constraintlayout

我创建了一个活动,该活动将用作显示定制设计模式的屏幕。该活动的整个背景将是30%的黑色叠加视图,可以点击以关闭该活动。

这是简单布局的屏幕:

modal

在onCreate中,我将setOnClickListener添加到了叠加层:

overlayView.setOnClickListener {
        println("tapped")
}

叠加层正在接收水龙头,但是白色的“模态”视图也正在接收水龙头,这是期望的。

从上面的屏幕快照的组件树中可以看到,我正在使用一个视图(overlayView),然后在其上方使用ConstraintLayout和嵌套的textView。我认为,由于白色模态位于overlayView上方,因此它不会接收来自overlayView的水龙头。

如何构造/组织组件树,以便仅从overlayView而不是白色模式检测到抽头?

1 个答案:

答案 0 :(得分:1)

通常,触摸事件将“浏览”视图,直到找到实际处理该事件的视图为止。在这种情况下,即使您点击模式视图,单击事件也会转到背景叠加层,因为模式视图不会做任何事情来拦截事件。

您可以通过在模式视图中添加禁止点击侦听器来解决此问题:

modalView.setOnClickListener { }

这会导致模式视图在其上接收任何点击事件并进行处理,从而阻止它们“通过”进入背景叠加视图。