Краткое руководство для разработчиков

Jetpack Compose приносит нам так много хороших вещей. Работать над UI просто удовольствие по сравнению с XML. Одна из вещей, которые он предлагает нам, — это нестандартный способ реализации нижних листов. Нет необходимости включать какие-либо зависимости. Все уже есть.

Модальные нижние листы представляют набор вариантов, блокируя взаимодействие с остальной частью экрана. Они являются альтернативой встроенным меню и простым диалогам, предоставляя дополнительное пространство для контента, значков и действий. Согласно официальной документации

Мы будем использовать ModalBottomSheetLayout, у которого есть собственное состояние, которое нам нужно запомнить. Итак, давайте продолжим.

Сначала мы создадим sheetState:

Есть три ModalBottomSheetValues:

  • Hidden
  • Expanded
  • HalfExpanded

Первые два описания достаточно. HalfExpanded будет показывать только половину нижнего листа, и это состояние доступно только в том случае, если высота нижнего листа превышает 50% высоты экрана.

confirmStateChange — это необязательный обратный вызов, вызываемый для подтверждения или наложения вето на ожидающее изменение состояния. С таким значением мы блокируем HalfExpanded значение нижнего листа.

Не забудьте добавить @OptIn(ExperimentalMaterialApi::class), так как это все еще экспериментально.

Теперь мы можем реализовать ModalBottomSheetLayout и поместить внутрь его содержимого весь экран. Наш экран будет выглядеть так:

Как мы видим, мы поместили составные элементы экрана внутрь содержимого ModalBottomSheetLayout. Также мы передаем sheetState в качестве аргумента.
BackHandler — это эффект обработки нажатия системной кнопки «Назад». Первый аргумент — это когда он включен, а второй — что он должен делать, когда нажимается системная кнопка «Назад».

В этом случае мы просто хотим скрыть нижний лист, если он отображается и нажата системная кнопка «Назад».

Button внутри Column показывает и скрывает нижний лист. sheetState.show() покажет нижний лист с анимацией, а sheetState.hide() скроет нижний лист с анимацией.

И последнее, что нам нужно здесь увидеть, это BottomSheet компонуемость:

Это действительно простой столбец, заполненный текстом. Вы можете положить сюда все, что хотите.

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

Это довольно простая логика, но ее очень полезно знать. Одно замечание: логика отображения и скрытия нижнего листа заложена в пользовательском интерфейсе, но она должна обрабатываться ViewModel. Это немного выходит за рамки этой статьи, так как я просто хотел показать, как вы можете создать нижний лист.

Это было бы все для этой статьи. Надеюсь, вам понравилось!

Весь исходный код вы можете найти в моем репозитории GitHub.

Want to Connect?
GitHub
LinkedIn
Twitter
Portfolio website

Если вы хотите узнать о запросе разрешений в Jetpack Compose, ознакомьтесь с этими статьями: