Android 添加更大的透明覆盖以增加可点击区域,而无需更改布局

Android 添加更大的透明覆盖以增加可点击区域,而无需更改布局,android,layout,overlay,Android,Layout,Overlay,我想增加按钮(ImageView)的可点击区域。但我不想让它在视觉上反映出来。它必须看起来像按钮很小(没有边距、填充等),但可点击区域很大 我能想到的唯一一件事就是把我的整个布局放在一个相对的图层中,然后通过编程将覆盖层添加到第二个“图层”。用数学计算左边距和上面距 有更好的方法吗 我已经看过了 还是在这里 还有一些人,但他们总是改变布局,在图像中添加填充或透明区域,我不想这样做。使用触摸代理,如中所述 要点是,您可以定义一个TouchDelegate对象并将其附加到小部件以增加其触摸面积

我想增加按钮(ImageView)的可点击区域。但我不想让它在视觉上反映出来。它必须看起来像按钮很小(没有边距、填充等),但可点击区域很大

我能想到的唯一一件事就是把我的整个布局放在一个相对的图层中,然后通过编程将覆盖层添加到第二个“图层”。用数学计算左边距和上面距

有更好的方法吗

我已经看过了

还是在这里


还有一些人,但他们总是改变布局,在图像中添加填充或透明区域,我不想这样做。

使用
触摸代理,如中所述

要点是,您可以定义一个
TouchDelegate
对象并将其附加到小部件以增加其触摸面积,而不会产生视觉影响

在Kotlin中,这可能看起来像:

    fun setExpandedTouchArea(view: View, extraSpace: Int) {
        val parent = view.parent as View

        parent.doOnLayout {
            val area = Rect()

            view.getHitRect(area)

            area.top -= extraSpace
            area.bottom += extraSpace
            area.left -= extraSpace
            area.right += extraSpace

            parent.touchDelegate = TouchDelegate(area, view)
        }
    }

这几乎是,但不完全是我要找的。不同之处在于,该区域仅限于父视图的边界,我正在寻找不限于此的内容。但我会使用它,它很容易实现,并且会很好地提高我的视图的“可触摸性”。否则,我想我必须以编程方式实现它,这是不值得的,在这种情况下。@Commonware第二个链接无效。