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

标签 android layout overlay

我想增加按钮 (ImageView) 的可点击区域。但我不希望这在视觉上得到反射(reflect)。它必须看起来按钮很小(没有边距、填充等)但可点击区域很大。

enter image description here

我唯一能想到的就是将我的整个布局放在 RelativeLayout 中,并以编程方式将叠加层添加到第二个“层”。用数学计算 margin left 和 margin top。

有没有更好的方法?

我已经看过这里了 Expand clickable area of an ImageView by using padding?

或在这里 Making a button easier to click

还有其他一些,但他们总是更改布局,为图像添加填充或透明区域,我不想那样做。

最佳答案

使用 TouchDelegate,如 this blog post 中所述.

要点是您可以定义一个 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)
        }
    }

关于android - 添加更大的透明覆盖层以增加可点击区域,而无需更改布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073079/

相关文章:

html - 内置在 Wordpress 上的列简码 - 漂亮的边框解决方案

CSS布局最佳实践

android - 如何禁用透明覆盖 fragment 的背景 Activity

java - Android 9 - KeyStore 异常 android.os.ServiceSpecificException

android - 更改应用安装位置权限

android - 如何将应用程序中的图像从图库添加到 android 中的 recyclerview?

reactjs - 在 React Video JS 中使用 videojs 插件

android - 如何根据 ListView 上的文本从自定义 ListView 打开不同的布局?

java - GridLayout 不调整大小以适应组件

settings - 如何在 android overlay 中设置默认设置(强制门户模式)