요약

 

보통 이런 건 결론만 원하시는 분들이 많아서 결론부터 적겠습니다.

 

 

이 코드는 로그에 상태바의 크기를 px단위로 출력합니다. 즉, 해당 블록 안에서 insets.systemWindowInsetTop 값이 상태바의 크기입니다.

위 코드에서 myrootview는 xml상에서의 루트 View를 말합니다(보통 CoordinatorLayout이나 ConstraintLayout)

(해당 코드의 출처는 Droidcon 2017입니다.)

 

 

 

필요성

 

좋은 예시(다음 웹툰)

 

보통 상단바는 접근할 필요가 없는, 시스템에서 관리하는 영역이기 때문에 굳이 크기를 알 이유가 없습니다.

꽉 찬 화면을 원하면 원래는 Fullscreen 옵션만 적용해도 자동으로 상태바를 숨기도록 할 수 있습니다.

 

하지만 위 예시처럼 상태바의 존재 유무가 계속 바뀌어야 할 때는, Fullscreen 옵션을 바꾸면 앱의 표시 가능 화면 크기가 계속 변경되어 부자연스럽게 화면이 흔들리게 됩니다.

그래서 보통 상단바가 차지하는 크기를 아예 없애고(FLAG_LAYOUT_NO_LIMITS 플래그) 툴바가 상단바의 영역까지 커버하도록 만들어주는데, 이떄 상단바의 크기만큼 Padding을 넣어줘야 하기 때문에 상단바의 크기를 알아야 합니다.

 

본래는 상단바의 크기는 24dp로 고정되어 있었지만, 최근 노치 디자인이 유행하며 삼성 기기 등에서는 상단바의 크기가 기기마다 달라지게 되었습니다.

 

 

 

 

 

적용

 

 

 

위의 다음 웹툰 예시와 같은 디자인을 만드려면 이렇게 하면 됩니다.

여기서 저는 툴바에 40dp 크기를 주었고, 입력은 px단위로 받기 때문에 dpToPx 함수를 만들어 단위변환을 해주었습니다.

 

아래는 적용 화면입니다.

 

 

 

 

 

해당 View는 Statusbar를 투명하게 만들었고, 버튼을 누르면 toolbar가 숨겨집니다.

여기에 Fullscreen 옵션까지 적용하면 toolbar를 숨길 때 Statusbar 자체를 숨겨 다음 웹툰과 같은 스타일을 얻을 수 있습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기