Android 15 SystemBar 관련 변경사항

KEH·2025년 2월 15일
post-thumbnail

Android 15에서 SystemBar(StatusBar, NavigationBar) 관련하여 변경사항이 발생하였는데, 바로 Window.navigationBarColor, Window.statusBarColor 가 deprecated 된 것입니다. 이와 관련하여 제가 대응한 해결 방법을 공유합니다.

deprecated 된 이유

Android 15 Edge-to-edge enforcement 공식 문서

Android 15 버전부터 enableEdgeToEdge() 를 강제하도록 변경되었습니다.

enableEdgeToEdge() 란?

SystemBar(StatusBar, NavigationBar) 영역까지 화면을 확장시키는 함수입니다.
Android 15 버전부터 enableEdgeToEdge() 를 강제로 적용시킴으로써 SystemBar 의 색상을 따로 적용하지 않도록 하기 위해 deprecated 된 것이 아닐까 하는 저의 개인적인 생각입니다.

해결 방법

1. 모든 Activity 에 enableEdgeToEdge() 적용

class MainActivity : ComponentActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
        enableEdgeToEdge()
        
        super.onCreate(savedInstanceState)
	}
}
  1. enableEdgeToEdge() 를 사용하기 위해서 Activity 는 ComponentActivity 를 상속해야 합니다.
  2. enableEdgeToEdge() 는 onCreate 시점에서 super.onCreate(savedInstanceState) 이전에 호출해야 합니다.

enableEdgeToEdge() 로 인해 상태바와 네비게이션바 영역까지 화면이 확장되어 두 영역의 색상은 화면의 색상과 동일하게 설정됩니다.

2. 예외사항

하지만 enableEdgeToEdge() 를 적용하더라도 네비게이션바의 경우 제스처 모드에서만 예상한대로 동작하고 2버튼 또는 3버튼일 경우 따로 설정이 필요합니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {	//SDK 29(Android 10) 이상
	window.isNavigationBarContrastEnforced = false
} else {	//SDK 28(Android 9) 이하
	window.navigationBarColor = /** NavigationBar 색상 **/
}

SDK 29(Android 10) 이상

window.isNavigationBarContrastEnforcedfalse 로 설정합니다.

window.isNavigationBarContrastEnforcedSystemBar 가 투명하게 설정되었을 때 System 바의 아이콘이 구분될 수 있도록 안드로이드에서 자체적으로 대비를 조절할지를 설정하는 메서드입니다.

true 로 설정하면 대비가 조절되어 위의 사진과 같이 모든 영역에 배경색이 확장되지 않게 됩니다.
제가 원하는 상황은 모든 영역에 배경색이 확장되는 것이기 때문에 false 로 설정하였습니다.

SDK 28(Android 9) 이하

window.navigationBarColor 메서드를 사용하여 네비게이션바의 색상을 설정합니다.

3. 상태바와 네비게이션바의 아이콘 색상 설정

아이콘 색상은 WindowInsetsControllerCompat 클래스의 isAppearanceLightStatusBars/isAppearanceLightNavigationBars 메서드로 설정할 수 있습니다.

WindowInsetsControllerCompat(window, window.decorView).run {
	isAppearanceLightStatusBars = /** 검은색: true, 흰색: false **/
	isAppearanceLightNavigationBars = /** 검은색: true, 흰색: false **/
}

현재 상태바와 네비게이션바에 설정된 색상에 맞춰 아이콘 색상을 설정하길 바랍니다.

profile
:P

0개의 댓글