Как разрешить внешний контакт для BottomSheetDialog? - PullRequest
1 голос
/ 16 апреля 2019

Я работаю над BottomSheetDialogFragment, мое требование - создать нижнее меню, где, если я щелкаю за пределами области фрагмента , он должен не отменять диалоговое окно и должен сохраняться.

ВЫПУСК: И событие за пределами фрагмента должно распространяться на нижний фрагмент / фрагмент.

Я уже пробовал ниже (не работает для BottomDialogFragment): Разрешитьвнешнее прикосновение к DialogFragment

Чтобы остановить диалоговое окно, отмените его, я попробовал ниже (я вызываю setCancelable(boolean) в onStart() BottomDialogFragment):

@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);
    }

ссылка

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Попробуйте код ниже в вашем BottomSheetDialog:

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

или оберните <CoordinatorLayout>, например, вашим <ConstraintLayout> и внедрите <layout /> и прикрепите к BottomSheetBehavior.

1 голос
/ 16 апреля 2019

Это невозможно, пока вы не используете BottomSheetDialogFragment.BottomSheetDialogFragment - это диалог, и, как поведение каждого диалога, он не допускает перехвата пользователем ни в одном представлении позади диалога, хотя это видно пользователю.

Поэтому для достижения этого вам необходимо использовать Fragmentвместо BottomSheetDialogFragment.И да, это потребует большого количества изменений кода :) и вам придется жить без BottomSheetDialogFragment, если вы хотите перехватить представления позади.

0 голосов
/ 16 апреля 2019

попробуйте

setCanceledOnTouchOutside(false);
...