본문 바로가기
Tips/Android

[Android] Status Bar, Navigation Bar 없애기

by DevJaewoo 2022. 7. 19.
반응형

Status Bar, Navigation Bar 없애기

앱을 만들다 보면 상태표시줄과 네비게이션 바 없이 전체화면으로 출력하고 싶을 때가 있다.

이럴 때 window.decorView.systemUiVisibility를 통해 전체화면으로 만들 수 있다.

API 30 이후로는 systemUiVisibility가 Deprecated 되어서 windowInsetsController를 대신 사용해야 한다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false)
    window.insetsController?.hide(WindowInsets.Type.systemBars() or WindowInsets.Type.navigationBars())
    window.insetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
else {
    window.decorView.systemUiVisibility =
        (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
                View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)
}

 

AIDL이나 Intent를 통해 다른 앱이 호출되면 다시 Status Bar와 Navigation Bar가 되돌아올 수 있다.

이럴 땐 위의 코드를 onWindowFocusChanged 안에 넣으면 다른 앱이 종료될 때 자동으로 네비게이션 바도 사라진다.

override fun onWindowFocusChanged(hasFocus: Boolean) {
    if(!hasFocus) return

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        window.setDecorFitsSystemWindows(false)
        window.insetsController?.hide(WindowInsets.Type.systemBars() or WindowInsets.Type.navigationBars())
        window.insetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    }
    else {
        window.decorView.systemUiVisibility =
            (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
                    View.SYSTEM_UI_FLAG_FULLSCREEN or
                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)
    }
}

 

반응형