在 Flutter 2.5 之前,Flutter 应用可以通过在其应用清单文件 (AndroidManifest.xml) 的元数据中定义启动屏,通过在其 FlutterActivity 中实现 provideSplashScreen,或两者兼而有之,来添加启动屏。这会在 Android 启动屏显示到 Flutter 绘制第一帧的短暂时间内显示。此方法自 Flutter 2.5 起已被弃用。Flutter 现在会自动保持 Android 启动屏显示,直到绘制第一帧。

要从定义自定义启动屏迁移到仅为您的应用定义自定义启动屏,请按照您应用自定义启动屏在 2.5 版本发布之前是如何定义的步骤进行操作。

FlutterActivity 中定义的自定义启动屏

  1. 找到您应用中 FlutterActivity 内的 provideSplashScreen() 实现,然后删除它。此实现应涉及将您应用的自定义启动屏构建为 Drawable。例如

    java
    @Override
    public SplashScreen provideSplashScreen() {
        // ...
        return new DrawableSplashScreen(
            new SomeDrawable(
                ContextCompat.getDrawable(this, R.some_splash_screen)));
    }
  2. 请使用后续章节中的步骤,以确保您的 Drawable 启动屏(在上例中为 R.some_splash_screen)已正确配置为您应用的自定义启动屏。

在清单文件中定义的自定义启动屏

  1. 找到您应用的 AndroidManifest.xml 文件。在此文件中,找到 activity 元素。在此元素内,识别 android:theme 属性和定义启动屏为 io.flutter.embedding.android.SplashScreenDrawablemeta-data 元素,并更新它。例如

    xml
    <activity
        // ...
        android:theme="@style/SomeTheme">
      // ...
      <meta-data
          android:name="io.flutter.embedding.android.SplashScreenDrawable"
          android:resource="@drawable/some_splash_screen"
          />
    </activity>
  2. 如果未指定 android:theme 属性,请添加该属性并为应用的启动屏定义启动主题

  3. 删除 meta-data 元素,因为 Flutter 不再使用它,但它可能会导致崩溃。

  4. 在您应用的 style 资源中,找到由 android:theme 属性指定的the theme 定义。此主题指定了您应用的启动主题。确保 style 属性配置了 android:windowBackground 属性,其中包含您的自定义启动屏。例如

    xml
    <resources>
        <style
            name="SomeTheme"
            // ...
            >
            <!-- Show a splash screen on the activity. Automatically removed when
                 Flutter draws its first frame -->
            <item name="android:windowBackground">@drawable/some_splash_screen</item>
        </style>
    </resources>