본문 바로가기
Android

전체 화면 설정

by holy season 2023. 4. 21.
반응형

안드로이드 전체화면

lean back

사용자가 동영상을 시청할 때와 같이 화면과 거의 상호작용하지 않을 때 사용할 수 있는 전체 화면 환경 설정

lean back 모드를 사용 설정

setSystemUiVisibility()에 SYSTEM_UI_FLAG_FULLSCREEN, SYSTEM_UI_FLAG_HIDE_NAVIGATION을 설정

setSystemUiVisibility(
	SYSTEM_UI_FLAG_FULLSCREEN
	|SYSTEM_UI_FLAG_HIDE_NAVIGATION
    )

immersive

사용자가 화면과 많이 상호작용하는 앱용

setSystemUiVisibility()에 SYSTEM_UI_FLAG_IMMERSIVE, SYSTEM_UI_FLAG_FULLSCREEN, SYSTEM_UI_FLAG_HIDE_NAVIGATION 을 설정

setSystemUiVisibility(
	SYSTEM_UI_FLAG_IMMERSIVE
	|SYSTEM_UI_FLAG_FULLSCREEN
	|SYSTEM_UI_FLAG_HIDE_NAVIGATION
    )

lean back로 설정

전체화면 모드를 lean back 모드로 설정하고 보니 status bar와 navigation bar가 불투명한 것이 마음에 안 들었다.

그래서 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);를 사용해 가장자리를 스와이프 하거나 밑에서 위로 쓸어 올리면 반투명한 statusbar와 navigationbar가 몇 초 올라오고 다시 내려가도록 만들었다.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)은 전체화면 모드 설정중 sticky immersive와 비슷한거 같다.

전체 화면 설정 코드

public class CctvPlayer extends AppCompatActivity {
    boolean isFullScreen = false;
    
        private void configureFullScreenButton() {
        fullScreenButton = findViewById(R.id.fullScreen);
        View decorView = getWindow().getDecorView();

        fullScreenButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (decorView.getSystemUiVisibility() == (View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)) {
                    fullScreenButton.setImageResource(R.drawable.ic_fullscreen_shrink);

                    isFullScreen = true;

                    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

                    decorView.setSystemUiVisibility(
                            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    );

                } else {
                    fullScreenButton.setImageResource(R.drawable.ic_fullscreen_expand);

                    isFullScreen = false;

                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

                    decorView.setSystemUiVisibility(
                            View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
                                    | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                    );
                }
            }
        });

    }
    
    //가로 모드 전환시 자동 전체화면 변경
    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            fullScreenButton.setImageResource(R.drawable.ic_fullscreen_shrink);

            isFullScreen = true;

            getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
            );
        }
    }
}
반응형

'Android' 카테고리의 다른 글

안드로이드 WebView 전체 화면 설정  (0) 2024.05.24
Android Splash 화면 만들기  (0) 2023.04.26
RecyclerView 만들기  (0) 2023.04.18
RecyclerView  (0) 2023.04.16
VideoView로 동영상 재생하기  (0) 2023.04.12