프로젝트 작업 중 특정 화면에서 스테이터스바 색상을 흰색으로 변경할 일이 있었습니다. 그래서 스테이터스바 색상 변경 코드와
window.setStatusBarColor()
아이콘 색상 변경하는 코드를
window.decorView.systemUiVisibility += View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
넣고 앱에 잘 적용된걸 확인한 뒤 다른 작업을 하고 있었는데 QA 도중 OS 버전이 낮은 기기에서 아이콘과 시간이 보이지 않는 이슈를 발견했습니다.
왜 그런가 하고 보았더니 색상 변경하는 코드는 흰색으로 잘 적용이 되었는데 스테이터스바에 있는 아이콘, 글자 색깔은 OS 버전 6 (API 23) 이상 부터 바꿀 수 있었고 해당 기기는 OS 버전 6 미만이어서 흰색 배경에 아이콘 색상도 흰색으로 나와 아무것도 보이지 않는 현상이었습니다. 프로젝트가 안드로이드 OS 버전 5 (API 21) 부터 지원하고 스테이터스바 영역색깔 바꾸는 코드도 API 21부터 변경가능해서 잘 될거라 믿었던 제 실수 였습니다.
디자인 요구사항은 흰색 스테이터스 바에 검은색 아이콘 색상이었는데 API 23 미만에서는 흰색 아이콘 색상밖에 적용할 수 없어 달리 방법이 없어보였습니다. 나중에 사용자가 쓰는 기기 평균 OS 버전이 올라가 min API 를 23으로 올릴 수 있다면 자연스럽게 해결될 것 같지만 현재는 min API 가 21이므로 어쩔 수 없이 사용자 기기의 OS 버전에 따라 분기처리해서 API 23 이하 버전에서는 스테이터스바 색상을 흰색 대신 다른 색으로 바꾸는 방향으로 문제를 해결했습니다.
fun Activity.setStatusBarColorDefault() {
window.apply {
var defaultStatusBarColor: Int
// setStatusBarColor() 함수를 사용하려면 아래 두 조건을 만족해야 함.
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 현재 API 가 23 이상인지 체크
defaultStatusBarColor = getColorRes(statusBarColor_23)
// 스테이터스바 아이콘 색상 변경 코드, API 23 이상부터 해당플래그 적용 가능
decorView.systemUiVisibility += View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
} else {
// API 23 미만이면 다른 스테이터스바 색상 적용
defaultStatusBarColor = getColorRes(statusBarColor_21)
}
defaultStatusBarColor = getColorRes(statusBarColor_21)
statusBarColor = defaultStatusBarColor // 스테이터스바 색상변경 코드, API 21 이상 부터 적용 가능
}
}
정리하면 다음과 같습니다.
- Window.setStatusBarColor() 함수는 API 21 이상부터 사용 가능
- 스테이터스바 아이콘 색상을 흰색으로 변경해주는 View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 플래그는 API 23 부터 사용 가능
- 그래서 만약 앱의 스테이터스바 색상이 흰색으로 디자인되어있다면 API 23 미만에서는 스테이터스바 색상을 다른 색으로 바꾸어야 함. 안그러면 스테이터스바도 흰색, 스테이터스바 아이콘도 흰색이라 아무 것도 안보일 수 있음
이상 소소한 팁이었습니다.
(추가)
블로그글 정리하다보니 Android11 을 타겟팅하는 앱에서는
decorView.systemUiVisibility += View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
이렇게 systemUivisibility 에 플래그 넣는 코드가 deprecated 되었네요. 나중에 시간날 때 이부분도 공부해서 정리해보겠습니다.
'소소한 팁' 카테고리의 다른 글
[Andorid] 커스텀 토스트 만들기 (0) | 2020.03.20 |
---|