Как разрешить внешний контакт для BottomSheetDialog?

1

Я работаю над BottomSheetDialogFragment мое требование - создать меню Bottom, где, если я 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);
    }

ссылка

Теги:
fragment
bottom-sheet

3 ответа

1

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

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

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

  • 0
    Здравствуйте, я попробовал это, но когда я нажимаю за пределами просмотра, тогда диалог не отменяется, но в то же время все события блокируются, что я хочу для более низкого VIew. Я хочу знать способ получить событие, чтобы понизить VIew. Спасибо за ваш ответ.
  • 0
    попробуйте использовать не диалог. просто BottomSheetBehavior <layout /> и присоедините к BottomSheetBehavior , все будет работать нормально.
Показать ещё 3 комментария
1

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

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

  • 0
    Основная проблема (с использованием Fragment) заключается в том, что мое приложение / Activity не использует Adjust resize но в соответствии с требованием нижнее меню должно перемещаться вверх, если отображается клавиатура (Пример) .BottomSheetDialog сам по себе интеллектуален для настройки в соответствии с вызовом изменения размера системы. не в состоянии реализовать то же поведение в MyCustomFragment. Так что я склонен использовать BottomSheetDialogFragment
  • 1
    Я думаю, что если это только оставленная задача, то это выполнимо. Вам просто нужно спроектировать макет контейнера так, как будто он обрабатывает клавиатуру. Вы можете посмотреть на code.luasoftware.com/tutorials/android/… или подобные темы
0

попробуй это

setCanceledOnTouchOutside(false);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню