[Android] Android 15 대응 - EdgeToEdge: 2. StatusBar 및 NavigationBar
배경색
statusBar의 배경색을 지정할 수 있는 window.statusBarColor는 Android 15(API 35)에서 지원 종료되었다.
If the app targets VANILLA_ICE_CREAM or above, the color will be transparent and cannot be changed. - Window#setStatusBarColor 주석
VANILLA_ICE_CREAM 이상을 타겟팅한다면 색상은 투명이고 이 값을 사용할 수 없다고 가이드되어 있다.
따라서 status bar와 navigation bar 영역의 색상을 바꾸려면 setOnApplyWindowInsetsListener에 넘겨주는 findViewById(android.R.id.content)의 배경색을 바꿔야한다.
1 | ViewCompat.setOnApplyWindowInsetsListener( |
이는 뷰의 배경색이기 때문에 padding을 설정해야 보이게 된다.
또한 status bar와 navigation bar의 색상을 다르게 하려면 아래 코드만으로는 안되고, 또 다른 조치를 취해줘야할 것으로 보인다.
statusBar는 위 코드와 같이 지정하고, navigationBar는 Activity의 최상위 뷰의 background에 컬러값 옵션과 paddingBottom을 설정함으로써 statusBar와 navigationBar의 색상을 다르게 처리하였다.
1 | override fun onCreate(savedInstanceState: Bundle?) { |
아이콘 색상
Android 15(API 35)에서는 다크모드에서의 흰색과 라이트 모드에서의 회색으로만 설정할 수 있다.
이를 설정하기 위해서는 아래 두 가지 setter를 사용한다.
- InsetsController#isAppearanceLightStatusBars(boolean)
- InsetsController#isAppearanceLightNavigationBars(boolean)
1 | WindowCompat.getInsetsController(this, this.decorView).apply { |
InsetsController에 관해서는 아래에서 설명한다.
제스처 네비게이션 바
⚠️ 픽셀 기기에서는 제스처 네비게이션 바의 색상이 제제대로 처리되지 않는 것 같음. 흰배경이 뒤에 있는데도 흰색으로 설정되어있음.
제스처 네비게이션의 바 색상은 흰색↔회색으로 변하는데, 이는 아래 인용과 같이 시스템에서 알아서 변경해준다.
동작 탐색 모드: 시스템은 시스템 표시줄의 콘텐츠가 뒤에 있는 콘텐츠를 기반으로 색상을 변경하는 동적 색상 조정을 적용한다. (시스템 표시줄 색상 변경하기 영상 참고)
[Android] Android 15 대응 - EdgeToEdge: 2. StatusBar 및 NavigationBar
https://dl137584.github.io/2025/06/25/034-android15-edge-to-edge-02-statusbar-and-navigationbar/