안드로이드 - Activity를 Full screen으로 만들기(Statusbar 숨기기)

앱을 풀스크린으로 실행시키거나, 상태바(Statusbar)가 UX와 어울리지 않을 때 제거하고 싶을 때가 있습니다. Statusbar를 숨기는 방법에 대해서 정리하였습니다. (안드로이드 버전에 따라서 코드가 약간 다릅니다.)

Hide statusbar & Full screen

Android activity를 Full screen 설정 및 Statusbar를 숨기는 방법은 크게 두가지가 있습니다. 첫번째는 AndroidManifest.xml에 Activity의 theme를 설정하거나, 두번째는 Java에서 Code로 설정하는 방법입니다.

Activity의 Theme 변경

미리 정의된 속성을 사용한다면, Theme 속성을 Fullscreen으로 설정하면 됩니다.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.NoActionBar.Fullscreen" >
    ....
</activity>

내가 정의한 Theme를 사용한다면, windowFullscreen를 나의 Theme에 정의해줘야 합니다.

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

Java code

자바에서 코드로 설정하려면 아래 코드를 사용하시면 됩니다. 주의할 점은 Android OS 버전 별로 설정하는 flag가 다릅니다.

private void setFullscreen(boolean fullscreen) {
    ActionBar actionBar = getSupportActionBar();

    if (fullscreen) {
        if (actionBar != null) actionBar.hide();

        int flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_FULLSCREEN;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            flag |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
            flag |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
            flag |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        }
        getWindow().getDecorView().setSystemUiVisibility(flag);
    }
    else {
        if (actionBar != null) actionBar.show();

        int flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            flag |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        }
        getWindow().getDecorView().setSystemUiVisibility(flag);
    }
}

만약 setSystemUiVisibility()로 설정 후 UI가 변하지 않는다면 requestLayout()로 refresh하면 됩니다.

if(isFullScreen) {
    isFullScreen = false;
    setFullscreen(false);
} else {
    isFullScreen = true;
    setFullscreen(true);
}
getWindow().getDecorView().requestLayout();
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha