Android 12 上的 React Native 启动画面

Ant*_*noi 3 android splash-screen react-native android-12

我正在使用react-native-splash-screen库从 iOS 和 Android 上的图像在应用程序中制作自定义启动屏幕。

然而,谷歌在 Android 12 中引入了新的启动屏幕方法,这会导致启动屏幕重复、缺乏自定义以及需要迁移到删除旧屏幕的新实现等问题。

我喜欢我的旧启动画面,不想删除它,而且我看到 Instagram 应用程序(也在 React Native 上)似乎使用的不是 Android 12 原生启动画面,而是自定义启动画面,所以绝对应该是实现这一目标的一种方式。

那么,我怎样才能让我的自定义实现准确地保持不变,而不出现任何性能问题,并且能够像以前一样使用全屏图像呢?

Ant*_*noi 11

为 Android 12 配置我的旧实现并使其保持相同的行为确实非常容易:首先,app/build.gradle使用以下内容更改文件:

android {
   compileSdkVersion 31
   ...
}
dependencies {
   ...
   implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
}
Run Code Online (Sandbox Code Playgroud)

然后,将此样式添加到您的样式中:

android {
   compileSdkVersion 31
   ...
}
dependencies {
   ...
   implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
}
Run Code Online (Sandbox Code Playgroud)

更改AndroidManifest.xml主要活动的主题:

android:theme="@style/Theme.App.Starting"
Run Code Online (Sandbox Code Playgroud)

最后一步:在MainActivity.java更改中:

<style name="Theme.App.Starting" parent="Theme.SplashScreen">
    <item name="android:windowIsTranslucent">true</item>
    <item name="postSplashScreenTheme">@style/AppTheme</item> // or other theme you want to use
</style>
Run Code Online (Sandbox Code Playgroud)

这将保留您的自定义启动屏幕实现,更重要的是,保留自定义设计能力。我在我的应用程序中做到了这一点,一切都很完美,我的应用程序立即打开并立即出现自定义图像启动。

PS 我认为 Instagram 使用了相同的 hack,因为 Instagram 应用程序(在 React Native 中并且可能使用这个库)在 Android 12 上以其自定义启动栏打开,而不是原生的。