안드로이드 R(11)에서 전체화면 구현하기

2021. 6. 3. 11:07개발을 파헤치다/Android

반응형

안드로이드 R(11)에서는 더 이상 SystemUiVisibility를 사용할 수 없는데요.

이렇게 Deprecated(사라질 운명이라는 의미...)될 때마다 그에 맞는 대응을 해야 하는 안드로이드 개발자는

참 행복합니다^^ 쉴 새 없이 공부하고 그만큼 더 똑똑해질테니까요.

쉽게 생각하고 금방 되겠거니 했는데 생각보다 자료가 없고 맘처럼 되지 않아서 꽤 삽질을 했습니다.

아래 내용을 끝까지 보고 그냥 가져다 쓰기만 하셔도 제가 삽질한 시간은 버시는 겁니다 :)

하지만 제대로 이해하고 넘어가시길 추천드립니다. 자세한 내용은 코드에 주석으로 달아놓았으니깐요!

 

class MainActivity: AppCompatActivity(){
	override fun onCreate(savedInstanceState: Bundle?){
    	super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 전체화면 메서드 호출
        setFullScreen()
    }
    
    private fun setFullScreen(){
    	// 상단에 Action Bar 사라지게하기
        supportActionBar?.hide()
        
        // Android 11(R) 대응
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES>R){
        	  
            // 이 값이 True이면 내부적으로 SYSTEM UI LAYOUT FLAG들을 살펴보고
            // 해당 설정값들을 토대로 화면을 구성하게 됩니다.
            // 따라서 False로 설정을 해야 이제 사라질(Deprecated)될
            // Flag값들을 무시하고 Window Insets를 통해 화면을 구성할 수 있습니다
            window.setDecorFitsSystemWindows(false)
            
            val controller = window.insetsController
            if(controller != null){
            	// 상태바와 네비게이션을 사라지게한다
                controller.hide(WindowInsets.Type.statusBars() or
                	WindowInsets.Type.navigationBars())
                // 특정 행동(화면 끝을 스와이프하는 등)을 했을 때에만
                // 시스템 바가 나타나도록 설정
                controller.systemBarsBehavior = 
                	WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
            }
        }
        // R 버전 이하 대응
        else{
        	window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
            	// 컨텐츠를 시스템 바 밑에 보이도록 설정
                // 시스템 바가 숨겨지거나 보여질 때 컨텐츠 부분이
                // 리사이징 되는 것을 막기 위한 설정
                or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                // 네비게이션과 상태바를 사라지게하기
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN)
        }
    }
}

 

반응형