如何使BottomSheet UI的一部分不可拖动



默认情况下,底部工作表UI是可拖动的。这很好,我希望它是可拖动的。但在底部工作表的某个特定部分,我想禁用拖动。

我正在使用最下面的表格向用户显示收据。然后用户必须在收据上签名。UI中有一个可以接受签名的视图。但由于最下面的表格是可拖动的,在收据上签字会动摇表格的位置。当用户的触摸在签名控件内时,有没有一种方法可以防止拖动?

如果它不起作用,不要责怪我,但从时间的角度来看,我有一个大致的想法。(只需为签名创建一个onClickListener/onTouchListener即可。如果客户点击或触摸它,Bottomsheet的拖动功能将被禁用,上面提到的Listener:

final BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_DRAGGING) {
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});

不要忘记在不再点击或触摸签名后启用拖动功能。干杯

@Lance:这个对我很有效:订阅setOnTouchListener,然后在触摸上/下更改isDraggable。

signatureCaptureControl.setOnTouchListener { v, event ->
when (event.action) {
MotionEvent.ACTION_UP -> {
bottomSheetBehavior.isDraggable = true
v.performClick()
}
MotionEvent.ACTION_DOWN -> bottomSheetBehavior.isDraggable = false
}
}

最新更新