Как полностью открыть BottomSheetDialogFragment в Котлине?

Я могу открыть свой BottomSheetDialogFragment с помощью

val bottomSheet = BottomSheetFragment()
bottomSheet.show(fragmentManager!!, "BottomSheet")

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

Я осмотрелся, и кажется, что один из способов — установить состояние BottomSheetBehavior в STATE_EXPANDED, но я не смог найти решение, как это сделать в Kotlin.

Любая помощь будет оценена по достоинству!

9
0
8 642
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете установить состояние BottomSheetBehavior, поместив его внутрь onViewCreated вашего BottomSheetDialogFragment.

dialog.setOnShowListener { dialog ->
    val d = dialog as BottomSheetDialog
    val bottomSheet = d.findViewById<View>(R.id.design_bottom_sheet) as FrameLayout
    val bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
    bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}

Вы также можете установить высоту просмотра на высоту вашего диалогового окна, чтобы предотвратить зависание диалогового окна на полпути при попытке закрыть его.

bottomSheetBehavior.peekHeight = bottomSheet.height

Отлично спасибо! Просто пришлось изменить аргумент findViewbyId на com.google.android.material.R.id.design_bottom_sheet, поскольку я использую Androidx

SQLol 12.02.2019 12:03

У меня работает, просто нужно было указать минимальную высоту файла макета диалога .xml, так как у меня не так много контента.

Ofcourse 07.02.2020 14:53

Работал как шарм, также @SQLol пришлось изменить его с «R.id.design_bottom_sheet» на «com.google.android.material.R.id.design_bottom_sheet», спасибо

Simon Gomes 04.03.2020 10:38

не удалось показать нижний лист. bottomSheetDialogFragment.show(fragmentManager!!, "BottomSheet") показывает ошибку в этой строке

Jocelin 23.03.2021 09:48

Проблема с настройкой bottomSheetBehavior.peekHeight = bottomSheet.height заключается в том, что когда вы проводите пальцем вниз, чтобы закрыть диалоговое окно фактически не закрывается, и на экране остается серое перекрытие.

Jean Tadebois 14.06.2021 12:44

Чтобы избежать серого перекрытия, вместо этого используйте bottomSheetBehavior.skipCollapsed = true.

Jean Tadebois 14.06.2021 15:06

Пожалуйста, обновите ответ. Предложение @JeanTadebois установить для BottomSheetBehavior.skipCollapsed значение true, чтобы предотвратить зависание диалогового окна на полпути, является лучшим/более чистым выбором.

dknchris 20.12.2021 22:04

Другие вопросы по теме