Android 12 StatusBar, NavigationBar color setting
안드로이드12에서부터 systemUiVisibility()가 deprecate되어 상태바/내비바 아이콘 색상 설정에 있어 이슈가 생겼다.
구글 개발자 문서를 들여다보니 WindowInsetsController의 setSystemBarsAppearance()를 이용하여 작업을 진행해야 한다고 한다.
구글 개발자 문서 링크 : https://developer.android.com/reference/android/view/WindowInsetsController
상태바(StatusBar) 아이콘 색상 설정
/**
* 상태바 아이콘 색상 지정
* @param isBlack true : 검정색 / false : 흰색
*/
private fun setStatusBarIconColor(isBlack : Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// android os 12에서 사용 가능
window.insetsController?.let {
it.setSystemBarsAppearance(
if (isBlack) WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS else 0,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// minSdk 6.0부터 사용 가능
window.decorView.systemUiVisibility = if (isBlack) {
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
} else {
// 기존 uiVisibility 유지
window.decorView.systemUiVisibility
}
} // end if
}
상태바(StatusBar) 배경색상 설정
/**
* 상태바 배경 색상 지정
* @param colorHexValue #ffffff 색상 값
*/
private fun setStatusBarBgColor(colorHexValue : String) {
// 상태바 배경색은 5.0부터 가능하나, 아이콘 색상은 6.0부터 변경 가능
// -> 아이콘/배경색 모두 바뀌어야 의미가 있으므로 6.0으로 체크
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.statusBarColor = Color.parseColor(colorHexValue)
} // end if
}
내비바(navigation bar) 아이콘 색상 설정
/**
* 내비바 아이콘 색상 지정
* @param isBlack true : 검정색 / false : 흰색
*/
private fun setNaviBarIconColor(isBlack: Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// android os 12에서 사용 가능
window.insetsController?.let {
it.setSystemBarsAppearance(
if (isBlack) WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS else 0,
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
)
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 내비바 아이콘 색상이 8.0부터 가능하므로 커스텀은 동시에 진행해야 하므로 조건 동일 처리.
window.decorView.systemUiVisibility =
if (isBlack) {
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
} else {
// 기존 uiVisibility 유지
// -> 0으로 설정할 경우, 상태바 아이콘 색상 설정 등이 지워지기 때문
window.decorView.systemUiVisibility
} // end if
} // end if
}
내비바(navigation bar) 배경 색상 설정
/**
* 내비바 배경 색상 설정
* @param colorHexValue #ffffff 색상 값
*/
private fun setNaviBarBgColor(colorHexValue : String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 내비바 배경색은 8.0부터 지원한다.
window.navigationBarColor = Color.parseColor(colorHexValue)
} // end if
}
반응형
'▶개발 > Android' 카테고리의 다른 글
Binding Adapter(결합 어댑터) 예제를 통해 이해하기 (0) | 2022.04.16 |
---|---|
Android 공공 Open API를 retrofit2를 활용해서 사용하기. (0) | 2022.04.10 |
[Android] 안드로이드 액티비티 전환과 부가데이터(Intent) (0) | 2018.10.08 |
[Android] 안드로이드 레이아웃:Relative Layout (0) | 2018.10.07 |
[Android] 안드로이드 레이아웃:Frame Layout (0) | 2018.10.03 |