[Android] Android 15 대응 - EdgeToEdge: 3. WindowInsetsController
WindowInsetsController
setSystemUiVisibility가 deprecated되어 Android 15(API 35)부터는 WindowInsetsController 인터페이스를 사용해야 한다.
1 | /** |
여기의 플래그를 보면 기존에 제공하던 아래 플래그와 전혀 다른 것을 알 수 있다.
1 | decorView.systemUiVisibility = |
여러 SDK 버전을 커버하는 WindowCompat 클래스에는 다음과 같이 분기처리가 되어 있다.
1 | // Window의 Inset을 적용하는 경우 // |
1 | static class Api16Impl { |
1 |
|
이와 같이 Android 15(API 35) 이상에서는 Window의 Inset을 부분적으로 적용하는 경우, Window#setDecorFitsSystemWindows를 사용하면 된다.
인셋의 종류는 다음 세 가지이다.
- System bars insets
- Display cutout insets
- System gesture insets
SystemBar 숨김/표시
1 | val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) |
이를 사용해 시스템바를 표시하거나(show) 숨길(hide) 수 있다.
Window Inset 제어를 통한 FullScreen 구현
- [AndroidDev] 몰입형 모드를 위한 시스템 표시줄 숨기기
기존에 decorView에 systemUiVisibility 옵션을 주었던 것과는 달리 안드로이드 11(API 30)에 대응하기 위해서는 InsetsController를 이용해야 한다.
Android 11에서 기존 옵션에 매칭되는 사항은 다음과 같다.
- WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH: lean back
- WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE: immersive
- WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE: sticky immersive 최상단에서 쓸어내리거나 최하단에서 쓸어올리면 잠깐 나타나고 뷰에서 영역을 차지하지 않는다.
BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE를 적용한 예시 코드는 다음과 같다.
1 | WindowCompat.getInsetsController(this, this.decorView).apply { |
[Android] Android 15 대응 - EdgeToEdge: 3. WindowInsetsController
https://dl137584.github.io/2025/06/25/035-android15-edge-to-edge-03-windowinsetscontroller/