[Android] 011. Splash画面

簡単なアプリアイコンが表示されるSplash画面を追加する方法です

詳しくは以下を参照
https://developer.android.com/guide/topics/ui/splash-screen?hl=ja

Splash画面を追加するにはandroidx.core:core-splashscreenをimplementationしてください

res/values/themes.xmlにSplash画面用のテーマを追加します
postSplashScreenThemeに設定する値は元のテーマのnameです

<resources>
    <style name="Theme.xxx" parent="android:Theme.Material.Light.NoActionBar" />
    
    <style name="AppTheme.Splash" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">@color/black</item>
        <item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher</item>
        <item name="windowSplashScreenAnimationDuration">100</item>
        <item name="postSplashScreenTheme">@style/Theme.xxx</item>
    </style>
</resources>

テーマをSplash画面のものに変更

<application
        android:theme="@style/AppTheme.Splash">

MainActivityのonCreateに以下を実装
setKeepOnScreenConditionの戻値がtrueだとSplash画面が出っぱなしになるのでfalse
postSplashScreenThemeの設定でSplash画面のテーマが元のテーマに戻るはずですが戻らないという話もあるそうです
ここでは明示的に戻しています

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            val splashScreen = installSplashScreen()
            splashScreen.setKeepOnScreenCondition { false }

            CoroutineScope(Dispatchers.Default).launch {
                setTheme(R.style.Theme_xxx)
            }
        }
    }
}

Android Studio Giraffe 2022.3.1 built on June 29, 2023