Как установить коэффициент половинного расширения для нижнего листа в Compose?
В XML у нас есть нижний лист material3. Это позволяет нам установить поведение нижнего листа. Его можно обновить так:
bottomSheetBehavior.halfExpandedRatio = 0.6
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
Я переношу проект в Compose. Мое приложение использовало это полурасширенное соотношение для 3-позиционного нижнего листа: свернуто, наполовину расширено, расширено. Теперь я пытаюсь создать нижний лист следующим образом:
val sheetState = rememberBottomSheetState(
initialValue = BottomSheetValue.Collapsed
)
val scaffoldState = rememberBottomSheetScaffoldState(
bottomSheetState = sheetState
)
BottomSheetScaffold(
scaffoldState = scaffoldState,
sheetContent = {}
) {}
Но похоже, что у нас нет этих атрибутов поведения здесь. Можем ли мы получить то же поведение, что и в XML, с раскрытым наполовину нижним листом?
1 ответ
Да, это возможно. Но это немного работы. Вы в основном должны предоставить свои собственные реализации классов иSwipeableState
а также любые связанные перечисления, классы и составные функции, используемые этими двумя.
Основные моменты, на которые стоит обратить внимание:
- предоставить третье значение для
BottomSheetValue
для полураскрытого состояния - предоставить функцию, которая анимирует полурасширение (аналогично функциям
expand()
иcollapse()
вBottomSheetState
), а также свойство, которое проверяет, развернут ли нижний лист наполовину (аналогичноval isExpanded: Boolean
) - добавить третий
swipeable anchor
с половинным значением расширения, которого вы хотите достичь (отметьте строкуfullHeight - peekHeightPx to Collapsed
, здесь вы хотите добавить свой собственный якорь) - обрабатывать полурасширенное состояние в
.semantics
блокModifier
вBottomSheetScaffold
Возможно, вам придется настроить еще несколько вещей в зависимости от ваших конкретных требований. Настройка всего может занять некоторое время, но как только это будет сделано, это работает как шарм.