Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?
Organization

Android 12 DP 3で追加されたSplash screenの挙動を見てみる

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 時点ではこれを無効にする記載がありません
    (見落としているかもなので、見つけた方がいればコメントお願いします :pray: )
  • 既存アプリでスプラッシュの画面を独自に実装している場合は 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 でスプラッシュの下にも画像を表示させることができる

ドキュメント

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?