子视图在父视图之外无法点击

7
我已经创建了带有标记的地图视图。如下图所示:
Grandparent 是一个填充视图
Parent是我的标记视图
Child是一个可点击的标记

Parent设置了clipChildren(false),因此子元素是可见的。

我的问题是,子元素是可以被点击的,除了 Child 2Parent 外部的部分。 Parent也有适当的 TouchDelegate(我也为子元素尝试了这个)。

我该如何使整个子元素可点击?

enter image description here


你尝试过使用 setClipToPadding(false) 吗? - Samuel Eminet
是的,那不起作用。 - HansElsen
3个回答

1

如果不改变元素,我无法使其工作。
最终我扩大了父元素,并使用setTranslationY来保持标记的位置不变,就像这样:

solution


0
你不能这样做的原因是,ViewGroup#dispatchTouchEvent(MotionEvent ev)的默认实现是遍历它的子元素(而不是孙元素),以查找作为目标的子元素(位于点击事件点的底部)并能够接收触摸事件。如果您触摸的部分超出了Parent的边界,即Grandparent的唯一子元素,则它将什么也找不到。如果找不到ParentParent将永远无法查找其子元素(Children 1和Children 2),最终将事件分派给Child 2
因此,您可以增加Parent的大小(作为可接受的答案),这是最简单的方法;或者您将不得不覆盖GrandparentViewGroup#dispatchTouchEvent(MotionEvent ev)方法,以进行更复杂的查找,例如查找孙元素。该方法已经相当复杂,如果有人发现了实现,请分享,因为我没有找到一个。

0

我曾经遇到过类似的问题,通过将app:elevation="XXdp"设置给子元素来解决了它。


我刚刚尝试了这个,但它没有起作用。我为子元素设置了setElevation(100f),但没有成功。然后为父元素设置了setElevation(0f),但仍然没有效果。 - HansElsen
你尝试过使用布局工具来查看布局是如何绘制的吗? - JohnTheWalker
它不会绘制任何意外的东西。没有异常。 - HansElsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接