BottomSheetFragment自定义高度及取消拖拽实践

一、需求

直接上图


pic-1
pic-2

点击图一:“已选”,然后弹出图二底部弹窗。

底部弹窗的效果实现的方式有很多种,例如:popupwindow、dialog、activity等等,今天我们这边使用的是BottomSheetDialog,了解BottomSheetDialog的都知道高度是自适应内容的,并且可以进行拖拽。

那么,假如需求规定需要【固定高度】,并且【不能拖拽】呢?应该如何实现呢?

二、固定高度及禁止拖拽

1、继承BottomSheetDialogFragment

2、在onCreateDialog方法中拿到Dialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);

3、//重置高度 if (dialog != null) { View bottomSheet = dialog.findViewById(R.id.design_bottom_sheet); bottomSheet.getLayoutParams().height = ScreenUtils.getScreenHeight() * 2 / 3; }

4、//禁止拖拽BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { //禁止拖拽, if (newState == BottomSheetBehavior.STATE_DRAGGING) { //设置为收缩状态 mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { } };

记住:如果滚动使用Recycleview,请设置recyclerView.setNestedScrollingEnabled(false);

三、完整代码

https://github.com/xmutzlq/BottomSheetDemo/blob/master/README.md

你可能感兴趣的:(BottomSheetFragment自定义高度及取消拖拽实践)