Найти в Дзене

Android Java - BottomSheet

Оглавление
1) Создание проекта
2) Создание BottomSheet
3) Обработка нажатий
4) Магия дизайна
5) Шрифты

В данной статье поговорим о создании нижней панели (BottomSheet) на платформе Android.
BottomSheet, позволяет отображать дополнительный контент выдвигая снизу панель.

Пример из моего проекта
Пример из моего проекта

Создание проекта

1. Создадим пустой проект и назовем его например HelloBottom.

-2

2. В папке с макетами есть страница, activity_main (res/layout). В нем мы должны поменяем главный layout ConstraintLayout, на CoordinatorLayout.

-3
-4

3. Теперь добавим в наш CoordinatorLayout, новый ConstraintLayout. Он будет содержать в себе основные элементы не относящиеся к нижней панели. Так же укажем высоту и длину, как match_parent.

-5

4. Создадим необходимый дизайн-компонент, для нашей нижней панели. В папке со стилями (res/drawable) создадим файл, и назовем его style_auth_sheet.

-6
-7

5. Пропишем для в файле стиль.

-8

Создание BottomSheet

1. Возвращаемся к файлу с макетом (activity_main), и добавим ниже компонент LinearLayout, который и будет нашим BottonSheet (нижней панелью). ! Для большего удобства, можно указать главному компоненту background черного цвета, чтобы была видена нижняя панель.

-9

2. Теперь как мы видим на скриншоте выше, у нас создался компонент LinearLayout. Но он странно выглядит и не находится внизу. Чтобы превратить LinearLayout в тот самый BottonSheet (нижнюю панель), необходимо прописать:

app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
app:behavior_peekHeight="40dp"

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

-10

3. Добавим кнопку в нашу нижнюю панель, а так же добавим параметр android:gravity = "center" в LinearLayout, для размещения наших элементов внутри нижней панели по центру.

-11

4. Компилируем проект и запускаем его. Как видно на видео, мы можем свайпами вверх или вниз, выдвигать нашу нижнюю панель и скрыть ее.

-12

Обработка нажатий

Теперь поработаем с обработкой состояний.

1. В макете activity_main, создадим кнопку в ConstraintLayout, для открытия нижней панели.

-13

2. В java файле прикрепленный к данному макету (MainActivity), создадим глобальные переменные и сделаем обработку для нажатия.

Кнопка openButton - позволяет при нажатии открывать нижнюю панель.
Кнопка
closeButton - позволяет при нажатии скрывать нижнюю панель.
bottomSheet - позволяет проинициализировать нашу нижнюю панель для написания java скрипта к ней.
В нашем случае функция setState - помогает поменять состояние нижней панели.

Состояния:
STATE_COLLAPSED - Нижний лист скрывается вниз. Если указан параметр behavior_peekHeight, то панель выглядывает снизу.
STATE_EXPANDED - Нижний лист виден на максимальной высоте.
STATE_HIDDEN - Нижний лист больше не виден и может быть повторно показан только программно.
STATE_HALF_EXPANDED - Нижний лист разворачивается наполовину, и он может перетаскиваться пользователем.

Параметры для обработки действий пользователя:
STATE_DRAGGING - Пользователь активно перетаскивает нижний лист вверх или вниз.
STATE_SETTLING - Нижний лист устанавливается на определенную высоту после жеста перетаскивания/смахивания. Это будет высота просмотра, расширенная высота или 0, если действие пользователя вызвало скрытие нижнего листа.

-14

3. Компилируем и запускаем. Как видим, при нажатии на кнопки, наша нижняя панель может открываться и скрываться.

-15

4. Так же BottomSheet, поддерживает обработку действий при их совершении.

5. Добавим ниже код который сможет обрабатываться при совершении какого либо действия.
Как видно, если указать case и какое ни будь состояние, то при его совершении будет выполняться прописанный вами код.

-16

Магия дизайна

1. В папке drawable (res/drawable), создадим файл style_btn, и пропишем там дизайн для кнопки.

-17
-18

2. Все кнопки которые мы создавали, поменять их на androidx.appcompat.widget.AppCompatButton (Иначе стиль может не примениться).

-19

3. Назначим у всех кнопок параметр android:background="@drawable/style_btn".

-20

4. Меняем LinearLayout для нижней панели на androidx.constraintlayout.widget.ConstraintLayout. У кнопки, находящейся в нижней панели, меняем положение.

-21

5. Добавляем TextView(заголовок) и TextView(текст) и пропишем им стиль.

-22
-23

Шрифты

У вас может возникнуть ошибка с параметром fontFamily, так как вам необходимо добавить их непосредственно в проект. Для этого:

1. Сменить режим на Design (Есть кнопка в правом верхнем углу).

2. Нажать на TextView(Заголовок).

3. В поиске атрибутов ввести "font", найти параметр fontFamily, и в выпадающем списке нажать на More Fonts...

-24

4. В появившемся окошке ввести "inter", указать стиль шрифта "SemiBold" и обязательно установить галочку на параметр "Add font to project" (Благодаря ней стиль шрифта добавиться в папку с проектом, и не будет ошибок при переносе проекта на другой компьютер).

5. Компилируем и запускаем. Теперь нижняя панель стала немного красивее.

-25
-26