Android FullScreen을 Kotlin으로 구현하는 꿀팁
2021. 4. 27. 19:16ㆍ개발을 파헤치다/Android
반응형
Android 앱 개발을 하면 FullScreen을 한 번쯤은 만들게 되는데요.
가장 흔하게는 처음 서비스 로고가 뜨는 스플래쉬 화면이 될 수 있고 게임 개발 시에도 사용하게 됩니다.
Java로 Android FullScreen을 구현한 예제는 참 많이 찾아볼 수 있는데 Kotlin으로 적용한 예제가 상대적으로 없더군요.
또, Android 11(R)에 대응하는 예제가 거의 없었어요. 곧 SYSTEM_UI_FLAG_FULLSCREEN이 사라질 예정이거든요(API Level 30부터 Deprecated). 진정한 Android 개발자라면 새로운 업데이트에 대응할 수 있어야겠죠?
오늘은 이 두 가지를 모두 만족하는 예제를 알려드리겠습니다.
예상보다 더 힘겹게, 여러 문서를 보고 찾은거라 분명히 도움되시리라 생각합니다.
Android 11(R)부터는 SystemUiVisibility를 사용하여 FullScreen 모드를 적용하지 않습니다.
대신 Window Insets Controller를 활용해서 구현해야 합니다.
class SplashActivity : AppComaptActivity(){
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
// 전체화면으로 만드는 메서드 호출
setFullScreen()
}
fun setFullScreen(){
// Android 11(R) 대응
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES>R){
// 상단 Action Bar를 사라지게한다
supportActionBar?.hide()
// 이 값이 True이면 내부적으로 SYSTEM UI LAYOUT FLAG 값들을 살펴보고
// 해당 설정값들을 토대로 화면을 구성하게 된다.
// 따라서 False로 설정을 해주어야 이제 사라질(Deprecated) Flag 값들을
// 무시하고 Window Insets를 통해 화면을 구성하게 된다
window.setDecorFitsSystemWindwos(false)
val controller = windwo.insetsController
if (controller != null){
// 상태바와 네비게이션을 사라지게 한다
controller.hide(WindowInsets.Type.statusBars() or
WindowInsets.Type.navigationBars())
// 특정 행동(화면 끝을 스와이프하는 등)을 했을 때에만 시스템바가 나타나도록 설정
controller.systemBarBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
// R 버전 이하 대응
else{
// Action Bar 숨기지 않으면 뜨는 경우가 있다
supportActionBar?.hide()
// 전체화면 적용
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)
}
}
}
자세한 설명은 주석에 다 달려있으니 참고하시면 될 것 같네요.
혹시라도 설명이 이해가 안간다거나 더 궁금한 점이 있다면
망설이지 말고 여기로 언제든 물어봐주세요.
기쁜 마음으로 답변 드리겠습니다 :)
반응형
'개발을 파헤치다 > Android' 카테고리의 다른 글
안드로이드 R(11)에서 전체화면 구현하기 (2) | 2021.06.03 |
---|---|
Firebase로 안드로이드 앱 테스트용으로 배포하는 방법 (0) | 2021.06.01 |
안드로이드 APK 초보자도 3분이면 가능한 방법 (0) | 2021.04.10 |
[ Android Studio AlertDialog example ] 안드로이드 스튜디오 AlertDialog 핵심 예제 (0) | 2021.02.10 |
Android 기본 4대 구성요소 (0) | 2019.03.18 |