我创建了一个活动,该活动将用作显示定制设计模式的屏幕。该活动的整个背景将是30%的黑色叠加视图,可以点击以关闭该活动。
这是简单布局的屏幕:
在onCreate中,我将setOnClickListener添加到了叠加层:
overlayView.setOnClickListener {
println("tapped")
}
叠加层正在接收水龙头,但是白色的“模态”视图也正在接收水龙头,这是不期望的。
从上面的屏幕快照的组件树中可以看到,我正在使用一个视图(overlayView),然后在其上方使用ConstraintLayout和嵌套的textView。我认为,由于白色模态位于overlayView上方,因此它不会接收来自overlayView的水龙头。
如何构造/组织组件树,以便仅从overlayView而不是白色模式检测到抽头?
答案 0 :(得分:1)
通常,触摸事件将“浏览”视图,直到找到实际处理该事件的视图为止。在这种情况下,即使您点击模式视图,单击事件也会转到背景叠加层,因为模式视图不会做任何事情来拦截事件。
您可以通过在模式视图中添加禁止点击侦听器来解决此问题:
modalView.setOnClickListener { }
这会导致模式视图在其上接收任何点击事件并进行处理,从而阻止它们“通过”进入背景叠加视图。