Android App/Java

화면 풀스크린 적용(Full Screen)

AppJinny 2023. 2. 26. 14:25

*화면 풀스크린 적용(Full Screen)

-DecorView를 받아와서 원하는 설정값을 setSystemUiVisibility로 적용

-DecorView의 setSystemUiVisibility() 메소드를 통해 최상위 View를 어느정도 제어 가능함

-DecorView는 Top-Level View 중 하나이며 윈도우의 Background Drawable View를 담고 있는 객체인 셈임

1. HIDE_NAVIGATION : 하단 소프트키를 담고 있는 네비게이션 바를 숨겨주는 옵션 값

필요 빌드 버전 : ICE_CREAM_SANDWICH


2. FULLSCREEN : 상단 상태창(알림, 배터리등)을 숨겨주는 옵션 값

필요 빌드 버전 : JELLY_BEAN


3. IMMERSIVE_STICKY : HIDE_NAVIGATION과 FULLSCREEN만 해도 상태바가 없어지지만 IMMERSIVE_STICKY 옵션을 적용시키면, 화면을 터치하는 등 이벤트를 발생시켜도 상태바가 나타나지 않는다. 하지만 화면을 위로 드래그하면 상태바가 나타난다.(일시적으로)

필요 빌드 버전 : KITKAT

public class BasicAcitivty extends Activity {
 
    View decorView;
    int uiOption;
 
    @Override
    protected void onResume() {
        super.onResume();
        deleteStatusBar();
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        deleteStatusBar();
        return super.onTouchEvent(event);
    }
 
    private void deleteStatusBar(){
        decorView = getWindow().getDecorView();
        uiOption = decorView.getSystemUiVisibility();
        if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH )
            uiOption |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN )
            uiOption |= View.SYSTEM_UI_FLAG_FULLSCREEN;
        if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT )
            uiOption |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility( uiOption );
    }
}

-위 코드 참고주소 : https://namjungss.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-systembar-statusbar-%EC%A0%9C%EA%B1%B0

 

 

*실제 Java코드 적용

--다이얼로그 등으로 인해 해제될 수 있으니 항상 실행하기위해 onResume()에 작성

//하단바 숨기기
getWindow().getDecorView().setSystemUiVisibility(

        View.SYSTEM_UI_FLAG_LAYOUT_STABLE |

                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |

                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |

                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |

                View.SYSTEM_UI_FLAG_FULLSCREEN |

                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
);//하단바 숨기기

 

*다른 방법

//풀스크린 설정
//UI 옵션들을 비트 XOR 연산(^=)을 사용하여 토글(toggle)하는 방식으로 처리
//newUiOptions는 4102값이 되며 각 비트가 해당 옵션을 켜거나 끄는 역할을 하기 때문에, 하나의 숫자로 모든 옵션을 나타낼 수 있음
int uiOptions = getWindow().getDecorView().getSystemUiVisibility();
Log.d("확인", "uiOptions: " + uiOptions);
int newUiOptions = uiOptions;
newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

 

*다이얼로그에 적용 시 메서드 예

    private void deleteDlgStatusBar(Dialog dlg) {
        int uiOptions = dlg.getWindow().getDecorView().getSystemUiVisibility();
        int newUiOptions = uiOptions;
        newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
        newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        dlg.getWindow().getDecorView().setSystemUiVisibility(newUiOptions);

        dlg.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }