【问题标题】:Expand clickable area of an ImageView by using padding?使用填充扩展 ImageView 的可点击区域?
【发布时间】:2019-01-07 18:57:56
【问题描述】:

我有一个 ImageView,我希望它是可点击的。图像本身只有 32x32 像素,但我希望可点击区域更大,以便更容易点击。我希望我可以设置布局边距值以增加 imageview 的可点击区域的大小:

<ImageView
   layout_width="32dip"
   layout_height="32dip"
   layout_margin="20dip" />

那行不通,我能做的就是重新创建图像资源,使其周围有一个更大的透明区域。这有点烦人,因为如果我需要更改可点击区域,就很难调整。它也不仅仅是一个 png,它是一个 statelistdrawable,所以如果我需要调整可点击区域,我必须调整 3 个不同的 png。

我还能做什么?

谢谢

【问题讨论】:

标签: android


【解决方案1】:

使用填充。如果用于在视图边界之外插入空间,则使用布局边距。

所有边的填充相同

  <ImageView
       android:padding="20dip" />

或在每一边设置填充

<ImageView
     android:paddingLeft="10dip"
     android:paddingRight="15dip"
     android:paddingTop="23dip"
     android:paddingBottom="12dip" />

希望有帮助!

【讨论】:

  • 这个答案应该被标记为正确答案!
【解决方案2】:

我建议将minWidthminHeight 属性与scaleType="center" 结合使用,而不是调整图像大小(Peter Knego 的回答)或增加填充(Saimon 的回答):

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:minWidth="40dp"
  android:minHeight="40dp"
  android:scaleType="center"
  android:src="@drawable/your_image" />

这样可以确保小图像的尺寸至少为 40x40dp,而如果图像更小则不会放大。如果有一天图像将被替换为大于minWidthminHeight 的另一张图像,它在缩小时不会超过 40x40dp。因此,始终保证 40x40dp 的最小可点击尺寸,并且始终可以很好地显示图像。

【讨论】:

    【解决方案3】:

    建议(自己从未尝试过):

    1. 创建任意大小的 ImageView,而不是在不缩放的情况下将图像放入其中

      ImageView.setScaleType(ImageView.ScaleType.CENTER).
      
    2. 蛮力方法:创建新的更大的 png,原始图像居中,其余部分是透明的。

    【讨论】:

    • 最终使用了蛮力方法。
    • ImageView.setScaleType(ImageView.ScaleType.CENTER) 对我不起作用。无论如何,它都扩大了规模。
    • @thekindofme 如果您在 ImageView 上使用 android:background 而不是 android:src,则添加填充将缩放图像。
    【解决方案4】:

    像下面这样使用;其中宽度/高度是您的触摸半径

    <ImageView
      android:id="@+id/editProfile"
      android:layout_width="32dp"
      android:layout_height="32dp"
      android:padding="8dp"
      android:background="?attr/selectableItemBackgroundBorderless"
      android:src="@drawable/ic_edit"
      android:scaleType="fitCenter"
    />
    

    在上面的代码中,我希望我的 src 大小被视为 24dp 宽度/高度。并且触摸半径为 32dp。所以我使用了 8dp 的填充。

    【讨论】:

    • 我误以为高度和宽度实际上应该是 40 (24+8+8),而不是 32 (24+8)。已添加的 8dp 填充已添加到所有边,因此已从图标的总高度中删除了 8*2 dp,而不仅仅是 8。宽度也是如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2012-11-15
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多