본문 바로가기
▶개발/Android

안드로이드12 상태바/내비바 배경, 아이콘 색상 설정

by 브라더 준 2022. 4. 7.
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
    
}
반응형