一、需求
直接上图
点击图一:“已选”,然后弹出图二底部弹窗。
底部弹窗的效果实现的方式有很多种,例如: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