问题:项目中使用了BottomSheetDialogFragment,按照设计逻辑当BottomSheetDialogFragment 被用户拉起时,默认情况下BottomSheetDialogFragment 会待用黑色背景,背景部分只接受一个点击关闭,指令,但我想同时支持拉起BottomSheetDialogFragment并且对主界面进行正常的操作,
解决方案1:BottomSheet是可以直接支持这种操作,不足就是没有BottomSheetDialog的一些特殊功能;
方案2:找到BottomSheetDialogFragment的黑色背景view,重要能获取这个背景view,即可进行点击获取滑动事件,
在BottomSheetDialogFragment的onStart 方法中添加如下:
、、、
@Override
public void onStart() {
super.onStart();
Window window = bottomSheetDialog.getWindow();
if (window != null) {
View decorView = window.getDecorView();
if (decorView != null) {
// 查找背景视图并设置点击事件监听器
View backgroundView = decorView.findViewById(com.google.android.material.R.id.touch_outside);
if (backgroundView != null) {
backgroundView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
Log.w(TAG, "onClick: ACTION_DOWN" );
break;
case MotionEvent.ACTION_UP:
Log.w(TAG, "onClick: ACTION_UP" );
break;
case MotionEvent.ACTION_MOVE:
Log.w(TAG, "onClick: ACTION_MOVE" );
break;
}
// 返回 true 表示事件已被处理,不再传递到底层视图
// 返回 false 表示事件未被处理,将传递到底层视图
return true;
}
});
}
}
}
}
、、、
bottomSheetDialog 为当前创建的BottomSheetDialogFragment;