안드로이드 12 Splash Screen 설정하기

울늘·2022년 6월 30일
0

안드로이드 12 스플래시 스크린

안드로이드 12 스플래시 스크린이 모든 앱을 시작할 때 사용되도록 변경되어 스플래시 스크린을 필수적으로 설정하거나 앱의 아이콘을 사용하게 되었다. 그래서 이번 프로젝트를 진행하면서 custom splash screen을 제작하였다.

먼저 splash screen gradle을 추가해준 다음

<style name="Theme.project.SplashScreen" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">@color/white</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/splash_screen</item>
    <item name="postSplashScreenTheme">@style/Theme.project</item>
    <item name="windowSplashScreenAnimationDuration">1000</item>
  </style>

style에서 스플래시 스크린에 대한 커스텀 style을 작성해줍니다.
windowSplashScreenBackground : Background color에 대한 속성입니다.
windowSplashScreenAnimatedIcon : Icon에 대한 속성입니다.
windowSplashScreenIconBackgroundColor : Icon의 Background color에 대한 속성입니다.
windowSplashScreenBrandingImage : Branding Image에 대한 속성입니다. Branding Image는 Splash screen 하단에 위치합니다.
postSplashScreenTheme : 스플래시 화면이 끝난 후 가져올 style을 지정합니다.

보통 postSplashScreenTheme은 앱의 기본 style을 재지정합니다.

이후 manifests에서 application theme속성에 내가 커스텀한 splash style을 지정합니다

android:theme="@style/Theme.project.SplashScreen"

그 다음 첫 화면을 가져오는 activity에 splash 설정을 합니다.
저의 경우에는 MainActivty가 첫화면입니다.

override fun onCreate(savedInstanceState: Bundle?) {
    installSplashScreen().apply {
 	 setKeepOnScreenCondition{viewModel.isLoading.value}
    }
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    binding.lifecycleOwner = this
  }

Activity에 설정을 해주고 viewModel에 화면을 생성하는 시간을 설정하고 로딩이 완료 되었는지를 판별해서 splash화면을 끝내주겠습니다.

private val _isLoading: MutableStateFlow<Boolean> = MutableStateFlow(true)
  val isLoading : StateFlow<Boolean>
  get() = _isLoading

  init {
      viewModelScope.launch{
          delay(1000)
          _isLoading.value = false
      }
  }

해당 코드를 작성하면 끝입니다.

ps) 안드로이드 스튜디오 애뮬레이터로 스플래쉬 스크린을 확인하려면 앱을 실행 후 종료한 다음 애뮬레이터에서 재실행하면 확인할 수 있습니다. 처음에는 스플래시 화면이 안보여서 당황했지만 실제로는 잘 작동하고 있으니 당황하지 마세요

출처 : https://developer.android.com/guide/topics/ui/splash-screen
https://yoon-dailylife.tistory.com/124
https://velog.io/@pachuho/Android-안드로이드-12-Splash-Screen-적용하기

profile
주니어 안드로이드 개발자입니다!

0개의 댓글