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 );
}
}
*실제 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);
}