最近又遇到一个小小问题,BottomSheetDialog弹窗总是会滑动,从网上找了一大片解决办法都是解决禁止下滑关闭的问题的,但是还是会有一点点的滑动效果,正好这个一点点的滑动效果遇到了地图----BottomSheetDialog弹窗内添加了一个地图,地图也可以滑动,BottomSheetDialog也可以滑动,这可真是爽歪歪。
首先多说一句如何使用BottomDialog
//底部弹窗依赖
implementation 'com.github.SmartCyl:BottomDialog:1.0.4'
maven { url 'https://jitpack.io' }
废话不多说,先上图
首先写一个类去继承 BottomSheetDialog (下图)
然后重写(下图),注意!!不要从这个方法里直接去查找布局文件,哪个类里面调用这个方法,通过参数的方式将 布局view 传过来,为禁止滑动埋下伏笔。
这是在需要用到的类里面去调用自定义的弹窗,并进行一些操作,见下图
这部分是自定义的弹窗里面的关键代码部分,贴码在最后
贴码:
自定义的弹窗里面添加(也就是继承BottomSheetDialog 的类里面) 这是禁止滑动的精髓。
BottomSheetBehavior bottomSheetBehavior;
public void setmBottomSheetCallback(View sheetView) {
if (bottomSheetBehavior == null) {
bottomSheetBehavior = BottomSheetBehavior.from(sheetView);
}
bottomSheetBehavior.setBottomSheetCallback(mBottomSheetCallback);
}
//此部分为禁止该弹窗可滑动
private BottomSheetBehavior.BottomSheetCallback mBottomSheetCallback
= new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet,
@BottomSheetBehavior.State int newState) {
if (newState == BottomSheetBehavior.STATE_DRAGGING) {//判断为向下拖动行为时,则强制设定状态为展开
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED );
}
if (newState == BottomSheetBehavior.STATE_SETTLING ){
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED );
}
if (newState == BottomSheetBehavior.STATE_EXPANDED ){
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED );
}
if (newState == BottomSheetBehavior.STATE_COLLAPSED ){
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED );
}
if (newState == BottomSheetBehavior.STATE_HIDDEN ){
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED );
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// LogUtil.e(TAG, "onSlide——>" + slideOffset);
}
};
调用时的代码(我已进行注释修改):
//查找布局文件
View view = LayoutInflater.from(this).inflate(R.layout.弹窗的布局文件,null,false);
//调用自定义弹窗,并将布局文件传过去
LocationPopWindow testPopWindow = new LocationPopWindow(this,view);
//调用禁止滑动方法
testPopWindow.setmBottomSheetCallback((View) view.getParent());
//展示弹窗
testPopWindow.show();
//通过弹窗查找 弹窗内的控件,即可对控件进行操作
wv_content = testPopWindow.findViewById(R.id.wv_content);
//当弹窗关闭时进行操作
testPopWindow.setOnDismissListener(dialogInterface -> {
//这里面写弹窗关闭时进行什么样的操作
});