如何允许BottomSheetDialog进行外部触摸?

问题描述 投票:1回答:3

我正在研究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);
    }

reference

android fragment bottom-sheet
3个回答
1
投票

在使用BottomSheetDialogFragment之前,这是不可能的。 BottomSheetDialogFragment是一个对话框,并且作为每个对话框的行为,它不允许用户拦截对话框后面的任何视图,尽管用户可以看到它。

所以要实现这一点,你需要使用Fragment而不是BottomSheetDialogFragment。是的,它将需要大量的代码更改:)如果你想拦截背后的观点,你必须没有BottomSheetDialogFragment


1
投票

BottomSheetDialog中尝试以下代码:

 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
     return (super.onCreateDialog(savedInstanceState) as BottomSheetDialog).apply {
         setCanceledOnTouchOutside(false)
     }
 }

或者由<CoordinatorLayout>包裹,例如你的<ConstraintLayout>并实施<layout />并附加到BottomSheetBehavior


0
投票

试试这个

setCanceledOnTouchOutside(false);
© www.soinside.com 2019 - 2024. All rights reserved.