<

Android アプリにスプラッシュ画面を追加する

A graphic outlining the launch flow of an app including a splash screen

スプラッシュ画面 (起動画面とも呼ばれる) は、 Android アプリの読み込み中のシンプルな初期エクスペリエンス。 アプリケーションの準備を整えます。 アプリエンジンの時間を確保しながら ロードしてアプリを初期化します。

概要

Android では、制御できる 2 つの個別の画面があります。 ある起動画面Android アプリの初期化中に表示されます。 そしてスプラッシュスクリーンFlutter エクスペリエンス中に表示される 初期化します。

アプリの初期化

すべての Android アプリには初期化時間が必要ですが、 オペレーティング システムがアプリのプロセスをセットアップします。 Android は、起動画面に を表示するDrawableアプリの初期化中。

デフォルトの Flutter プロジェクト テンプレートには定義が含まれています 起動テーマと起動背景の説明。カスタマイズできます これは編集によってstyles.xml、テーマを定義できます だれのwindowBackgroundに設定されていますDrawableそれが起動画面として表示されるはずです。

<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <item name="android:windowBackground">@drawable/launch_background</item>
</style>

加えて、styles.xmlを定義します通常のテーマ適用されるFlutterActivity打ち上げ後 画面が消えてしまいました。通常のテーマの背景のみが表示されます スプラッシュ画面が消えた後のほんの一瞬の間、 そして方向転換中、そしてActivity復元。 したがって、通常のテーマでは 原色に似た単色の背景色 Flutter UIの背景色。

<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <item name="android:windowBackground">@drawable/normal_background</item>
</style>

AndroidManifest.xml で FlutterActivity を設定する

AndroidManifest.xml、 をセットするthemeFlutterActivity打ち上げのテーマに。それから、 メタデータ要素を目的の要素に追加しますFlutterActivityFlutter に起動テーマから切り替えるように指示します 適切なタイミングで通常のテーマに戻ります。

<activity
    android:name=".MyActivity"
    android:theme="@style/LaunchTheme"
    // ...
    >
    <meta-data
        android:name="io.flutter.embedding.android.NormalTheme"
        android:resource="@style/NormalTheme"
        />
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

Android アプリに希望の起動画面が表示されるようになりました アプリの初期化中。

アンドロイド12

Android 12 で起動画面を設定するには、 チェックアウトAndroid のスプラッシュ スクリーン。

Android 12 以降では、新しいスプラッシュ画面を使用する必要があります あなたのAPIstyles.xmlファイル。 Android 12 以降用の代替リソース ファイルを作成することを検討してください。 また、背景画像が以下のものと一致していることを確認してください。 アイコンのガイドライン。 チェックアウトAndroid のスプラッシュ スクリーン詳細については。

<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <item name="android:windowSplashScreenBackground">@color/bgColor</item>
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/launch_background</item>
</style>

それを確認してくださいio.flutter.embedding.android.SplashScreenDrawableいいえマニフェストに設定すると、provideSplashScreenいいえこれらの API は非推奨であるため、実装されています。 そうすると、Android の起動画面がスムーズにフェードアウトします。 flutterに入るとき アプリが起動され、アプリがクラッシュする可能性があります。

一部のアプリでは、最後のフレームを表示し続ける必要がある場合があります。 Flutter の Android 起動画面。例えば、 これにより、単一フレームの錯覚が維持されます。 Dart では追加の読み込みが継続されます。 これを達成するには、次のことを行います。 Android API が役立つ場合があります。

MainActivity.java
import android.os.Build;
import android.os.Bundle;
import android.window.SplashScreenView;
import androidx.core.view.WindowCompat;
import io.flutter.embedding.android.FlutterActivity;

public class MainActivity extends FlutterActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Aligns the Flutter view vertically with the window.
        WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            // Disable the Android splash screen fade out animation to avoid
            // a flicker before the similar frame is drawn in Flutter.
            getSplashScreen()
                .setOnExitAnimationListener(
                    (SplashScreenView splashScreenView) -> {
                        splashScreenView.remove();
                    });
        }

        super.onCreate(savedInstanceState);
    }
}
MainActivity.kt
import android.os.Build
import android.os.Bundle
import androidx.core.view.WindowCompat
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    // Aligns the Flutter view vertically with the window.
    WindowCompat.setDecorFitsSystemWindows(getWindow(), false)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
      // Disable the Android splash screen fade out animation to avoid
      // a flicker before the similar frame is drawn in Flutter.
      splashScreen.setOnExitAnimationListener { splashScreenView -> splashScreenView.remove() }
    }

    super.onCreate(savedInstanceState)
  }
}

その後、Flutter で最初のフレームを再実装できます。 Android 起動画面の要素を表示します。 画面上の同じ位置。 この例については、以下を確認してください。Android スプラッシュ スクリーン サンプル アプリ。