본문 바로가기

안드로이드 스튜디오

[안드로이드 스튜디오 코틀린] 상단바(Status Bar) 투명하게 만들기

728x90
반응형

 

 

 

안드로이드 앱 UI를 짤 때 상단바와 하단바를 아래 코드로 제거하면

 

 

private fun setFullScreen() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        window.setDecorFitsSystemWindows(false)

        val controller = window.insetsController
        if (controller != null) {
            // statusBar  -> 상단바 제거 , navigationBars -> 하단바 제거
            controller.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
            controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        }
    } else {
        window.decorView.systemUiVisibility =
            (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
    }
}

 

 

 

 

이렇게 상단바에(+하단바) 아무 것도 나오지 않는 UI가 만들어진다

 

 

 

 

 

 

 

 

 

 

 

근데 내가 원하는 것은 그냥 내 배경화면에 흰색 상태바나 검은색 상태바가 나타나는걸 원하는 것이였다.

-> 내 배경화면에 어울러지는 상태바!!!

 

(위처럼 해서 상태바의 색상을 줄 수도 있지만 이처럼 하면 무늬가 있는 배경화면을 사용할 때 뭔가 이상하다는 것을 알 수 있음)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이럴 때는, 위의 함수를 다시 잘 봐야 한다.

 

 

 

 

 

 

 

상단바와 하단바를 둘 다 제거하였는데

 

 

이번에는 상단바는 제거하지 않고 상단바의 배경을 transparent를 줘야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

방법은

 

 

1. 위 함수에서 상단바를 제거하는 코드는 제거해준다.

 

 

 

private fun setFullScreen() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        window.setDecorFitsSystemWindows(false)

        val controller = window.insetsController
        if (controller != null) {
            // navigationBars -> 하단바 제거
            controller.hide(WindowInsets.Type.navigationBars())
            controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        }
    } else {
        window.decorView.systemUiVisibility =
            (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
    }
}

 

 

이렇게 수정해준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. res -> theme.xml에 

 

 

<!-- Status bar color. -->
<item name="android:windowLightStatusBar" >false</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:enforceStatusBarContrast" tools:targetApi="q">false</item>

이렇게 세 줄을 추가해준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이 때,

 

<item name="android:windowLightStatusBar" >false</item>

false를 주면

 

 

상태바가 하얗게 나오고

 

 

 

 

 

 

 

 

 

 

 

 

 

<item name="android:windowLightStatusBar" >true</item>

 

true를 주면

 

 

 

 

 

 

까맣게 나온다.

 

 

 

 

 

728x90
반응형