Bởi vì tôi không thích ý tưởng chờ đợi thông qua bố cục chỉ để có được kích thước mới của hình chữ nhật TouchDelegate, tôi đã tìm một giải pháp khác:
public class TouchSizeIncreaser extends FrameLayout {
public TouchSizeIncreaser(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final View child = getChildAt(0);
if(child != null) {
child.onTouchEvent(event);
}
return true;
}
}
Và sau đó, trong một bố cục:
<ch.tutti.ui.util.TouchSizeIncreaser
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp">
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</ch.tutti.ui.util.TouchSizeIncreaser>
Ý tưởng là TouchSizeIncreaser FrameLayout sẽ bọc Spinner (có thể là bất kỳ Chế độ xem con nào) và chuyển tiếp tất cả các sự kiện cảm ứng được ghi lại trong đó được nhấn trực tiếp đến Chế độ xem con. Nó hoạt động cho các lần nhấp chuột, con quay mở ra ngay cả khi được nhấp vào bên ngoài giới hạn của nó, không chắc chắn tác động của các trường hợp khác phức tạp hơn là gì.