Android 12 で新たに Splash screen の API が登場したので、どのような挙動で何ができそうか書いていきます。
※ Android 12 はこの記事を書いている 2021/4/30 時点で DP 3 なので、おそらく API 自体にも変更が入るはずです。今すぐに対応が必要というわけではないのですが、今後の動向は気にしておきましょう。
[2021/7/1 追記] AndroidX にバックポートのライブラリがリリースされました
Android 12 では強制的にスプラッシュが表示される
- DP 3 時点では targetSDK のバージョン関係なく Android 12 でアプリを起動すると Splash screen が表示されるようになっています
- そのため既存のアプリを Android 12 DP3 で起動させると Splash screen が表示されます
- DP 3 時点ではこれを無効にする記載がありません
(見落としているかもなので、見つけた方がいればコメントお願いします)
- 既存アプリでスプラッシュの画面を独自に実装している場合は 2 回続けてスプラッシュの画面が表示されることになります
Splash Screen の API でアプリの初期化処理は可能
- スプラッシュが出ている間に初期化処理を行い、初期化処理が終わればスプラッシュを閉じるという処理は以下のようなコードで可能です。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
// Set up an OnPreDrawListener to the root view.
val content: View = findViewById(android.R.id.content)
content.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
// Check if the initial data is ready.
return if (viewModel.isReady) {
// The content is ready; start drawing.
content.viewTreeObserver.removeOnPreDrawListener(this)
true
} else {
// The content is not ready; suspend.
false
}
}
}
)
}
- ただこの処理は Android 12 だけで使うことになるので、Android 12 までのバージョンでは別途スプラッシュ用の画面を用意することになります
(Jetpack でなんとかならないだろうか…)
アイコンと背景色と Splash screen を閉じるときのアニメーションをカスタマイズ可能
- Splash screen のデフォルトの背景色は
android:windowBackground
が適用される-
android:windowBackground
を変更するとアプリの他画面の背景色にも影響があるので、Splash screen だけ背景色を変えたい時のためにandroid:windowSplashScreenBackground
の属性が追加されている
-
-
android:windowSplashScreenAnimatedIcon
でアニメーション付きのアイコンを設定できたり、(デザインガイドラインでは推奨されていないが)android:windowSplashScreenBrandingImage
でスプラッシュの下にも画像を表示させることができる

- Splash screen を閉じる時のアニメーションもコードでカスタマイズできる
https://developer.android.com/about/versions/12/features/splash-screen#customize-animation