假设我们要扩大Button的点击区域
一、你可以使用如下方式
<FrameLayout android:id="@+id/testClickArea" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="40dp" android:paddingTop="20dp" android:paddingRight="40dp" android:paddingBottom="20dp"> <Button android:id="@+id/testClickButton" android:layout_width="180dp" android:layout_height="60dp" android:layout_gravity="center" android:duplicateParentState="true" android:text="Test Click Area" /> </FrameLayout>
然后在 FrameLayout 上设置 OnClickListener,
但是,点击的时候却发现 Button 是没有点击效果的,怎么办呢?
我们可以在 Button 上添加 android:duplicateParentState="true"
二,我们可以使用 TouchDelegate
要使用 TouchDelegate
首先我们需要获取 Button 原来的点击区域,使用 View.getHitRect(Rect out) 即可获取 Button 的点击区域
然后我们扩大点击区域,并创建 TouchDelegate,如下将button点击区域扩大50px
testClickArea.post { val touchableArea = Rect() testClickButton.getHitRect(touchableArea) touchableArea.top -= 50 touchableArea.bottom += 50 touchableArea.left -= 50 touchableArea.right += 50 testClickArea.touchDelegate = TouchDelegate(touchableArea, testClickButton) }