이번에 프로젝트를 진행하며 가장 힘들었던 BottomSheet의 높이를 조절하게된 과정을 소개하려고 한다.
내가 의견을 내서 사용하게된 Material 디자인의 BottomSheet 기능인데 이렇게 고된 길을 걷게 될 줄 몰랐다.
왜 BottomSheet height를 조절해야 하지?
Customizing이 된 BottomSheet를 사용하기 위해 BottomSheetDialogFragment를 상속하여 만든
CustomBottomSheetDialogFragment 클래스를 만들었다.
그리고 막연하게 onCreateView에서 뷰를 바인딩해주고 실행해본 결과 계속 BottomSheet가 엄청 찔끔 올라왔다.
해당 화면을 캡쳐해두진 않아서 보여줄 순 없지만 화면 높이의 1/10정도..?
이유는 기본적으로 Material 라이브러리의 BottomSheet 자체 높이가 WRAP_CONTENT이다.
내가 원하던 높이는 대충 화면의 반 이상을 차지하는 것이었다.
(최소한 내가 xml에서 배치한 뷰가 다 보일 정도)
다른 글을 아무리 찾아봐도 xml의 parent view height가 match_parent면 원하는 대로 나와요~ 라고 했다.
음... 원하는 대로 안 나오던데..
해서 그렇게 여러 조합을 통해 검색해보다 찾게 되었는데 이전에 썼던
DialogFragment에서 버튼 텍스트 사이즈를 조절했던 방법과 유사한 방법으로 해결하게 되었다.
onStart에서 해결하기
저번 글처럼 코드 먼저 첨부해보도록 하겠다.
https://gist.github.com/BonusTrack02/9727aa9a7d7a0b993fc290c9336f6627
내가 사용하는 bottomSheet는 material 라이브러리에 포함되어 있다는 것을 인지해야 한다.
그래서 해당 bottomSheet를 findViewById로 가져왔다.
(뷰를 찾을 때 패키지 명을 명시해줘야 찾을 수 있다.)
찾은 bottomSheet를 setLayoutParams를 통해 높이를 Int값으로 정하거나
WRAP_CONTENT or MATCH_PARENT로 정할 수 있다.
그리고 해당 bottomSheet를 show 메소드를 사용해 보여줄 때
바로 펼쳐진 상태로 내가 원하는 높이의 바텀 시트를 보여주기 위해 Behavior를 정의해주었다.
Behavior를 정의해줄 때 BottomSheetBehavior.from 메소드를 사용했는데
이 때 전달해줄 파라미터는 맨 처음 findViewById로 가져온 뷰이다.
펼쳐진 상태로 바텀 시트가 보이려면 setState를 통해 EXPANDED 상태로 설정해주어야 한다.
내가 첨부한 코드에서 추가로 설정한 것이 하나 있는데 setSkipCollapsed를 true로 설정했다.
이는 바텀시트를 한번 Collapse 상태로 만들것인가를 설정하는 것인데
나의 경우에는 뒤로 가기 버튼이나 드래그 핸들로 바텀 시트를 내렸을 때
바로 hidee되길 원했기 때문에 true로 설정해주었다.
'Android' 카테고리의 다른 글
Android BottomNavigationView Uncheck All Items (0) | 2023.09.13 |
---|---|
Android BottomSheetDialogFragment Scrim 영역 터치 동작 (0) | 2023.09.11 |
Android DialogFragment Button Text Size(텍스트 크기 조절) (0) | 2023.08.27 |
Android RecyclerView ItemDecoration in Kotlin (0) | 2023.07.21 |
Codelab으로 Room 알아보기 - 2. Create the SleepNight entity(ㄴ) (0) | 2023.07.09 |