Foggy day

[Android] SplashScreen 완벽 적용 본문

Android

[Android] SplashScreen 완벽 적용

jinhan38 2024. 8. 3. 12:49

 

 

이번 포스팅에서는 Android에서 SplashScreen을 적용하는 방법을 알아보겠습니다. 좀 더 정확하게는 앱 실행 후 launch activity가 나오기 전에 잠시 동안 나오는 window 화면의 UI를 수정하는 내용입니다. 아무 설정을 하지 않는다면 일반적으로 빈 화면이 노출됩니다.

 

여기서 말하는 SplashScreen은 SplashActivity를 말하는 것이 아닙니다. Android 12부터 사용 가능한 Splash API를 의미합니다. SplashActivity를 사용하지 않는 방법도 있지만, 예제에서는 SplashActivity와 SplashScreen을 둘 다 사용하겠습니다. 일반적으로 SplashActivity에서 처리해야 하는 작업들이 있기 때문입니다.

 

 

1. Dependency

2. Resource

3. Theme

4. SplashActivity 

 

 

 

 

1. Dependency

App gradle에서 디펜던시를 추가해 주세요

implementation("androidx.core:core-splashscreen:1.0.1")

 

 

 


2. Resource

window화면에서 보여줄 Resource를 추가해 주세요

저는 아이콘을 안 보여줄 것이기 때문에 빈 화면의 xml 추가했습니다.

res/drawable/transparent_layer.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@android:color/transparent" />

</layer-list>

 

그리고 window 배경에 적용할 이미지를 drawable에 추가해 주세요

res/drawable/splash_bg.xml

 



3. Theme

themes.xml 파일에서 style을 추가하겠습니다.

<style name="Theme.CustomSplash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">@drawable/splash_bg</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/transparent_layer</item>
    <item name="postSplashScreenTheme">@style/Theme.Probing</item>
</style>

<style name="Theme.MyApp" parent="Theme.AppCompat.NoActionBar">
    <item name="backgroundColor">@color/white</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:statusBarColor">@color/white</item>
    <item name="android:windowLightStatusBar">true</item>
</style>

 

  • windowSplashScreenBackground
    앱 시작 시 나타나는 window화면의 배경입니다. drawable의 resource를 입력해도 되고, 컬러를 입력해도 됩니다.
  • windowSplashScreenAnimatedIcon
    화면 가운데에 나올 Icon입니다. drawable에 있는 파일을 추가하면 됩니다. drawable을 설정하기에 따라서 애니메이션 기능도 구현할 수 있습니다. 저는 아이콘을 안 보여줄 것이기 때문에 transparent_layer 파일을 입력했습니다.
  • postSplashScreenTheme
    Theme.CustomSplash를 적용시킨 후에 적용할 Theme를 입력하면 됩니다. 예제에서는 Theme.MyApp이라는 style을 추가 사용했습니다. 

 

 

 


4. SplashActivity

앱 실행 후 최초 진입할 Activity입니다.

SplashActivity를 추가해 주시고, manifest에서 앞서 만든 theme을 적용하겠습니다.

<activity
    android:name=".activity.SplashActivity"
    android:theme="@style/Theme.CustomSplash"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

 

 

그리고 SplashActivity.kt에서 SplashScreen을 적용시키겠습니다.
installSplashScreen() 코드를 넣어야 theme들이 window화면에 적용됩니다.

@SuppressLint("CustomSplashScreen")
class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        installSplashScreen()
        setContentView(R.layout.activity_splash)
    }
}

 

 

 

 

여기까지 작업이 완료됐다면 앱을 실행할 때 추가한 drawable들이 노출되는 것을 확인할 수 있습니다.