我正在研究BottomSheetDialogFragment
我的要求是创建Bottom菜单,如果我点击外部片段区域,它不应该取消Dialog并且应该保持。
问题:片段外的事件应该传播到下层片段视图/片段。
我已经尝试过以下(对BottomDialogFragment不起作用):Allow outside touch for DialogFragment
要停止对话取消,我尝试了下面(我在底部的DialogFragment的setCancelable(boolean)
中调用onStart()
):
@Override
public void setCancelable(boolean cancelable) {
super.setCancelable(cancelable);
BottomSheetDialog dialog = (BottomSheetDialog) getDialog();
dialog.setCanceledOnTouchOutside(cancelable);
View bottomSheetView = dialog.getWindow().getDecorView().findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheetView).setHideable(cancelable);
}
在使用BottomSheetDialogFragment
之前,这是不可能的。 BottomSheetDialogFragment
是一个对话框,并且作为每个对话框的行为,它不允许用户拦截对话框后面的任何视图,尽管用户可以看到它。
所以要实现这一点,你需要使用Fragment
而不是BottomSheetDialogFragment
。是的,它将需要大量的代码更改:)如果你想拦截背后的观点,你必须没有BottomSheetDialogFragment
。
在BottomSheetDialog
中尝试以下代码:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return (super.onCreateDialog(savedInstanceState) as BottomSheetDialog).apply {
setCanceledOnTouchOutside(false)
}
}
或者由<CoordinatorLayout>
包裹,例如你的<ConstraintLayout>
并实施<layout />
并附加到BottomSheetBehavior
。
试试这个
setCanceledOnTouchOutside(false);