Android 12上的React Native Splash Screen

f0brbegy  于 2023-04-07  发布在  React
关注(0)|答案(2)|浏览(141)

我正在使用react-native-splash-screen库在iOS和Android上从图像中制作应用程序中的自定义启动画面。
然而,Google在Android 12中引入了新的闪屏方法,这导致了闪屏复制,缺乏自定义以及需要迁移到这个新的实现来移除旧屏幕等问题。
我喜欢我的旧启动画面,不想删除它,而且我已经看到Instagram应用程序(也在React Native上)似乎没有使用Android 12原生的启动画面,而是使用自定义的启动画面,所以肯定应该有一种方法来实现这一点。
那么,我如何才能让我的自定义实现准确地保持不变,而不出现任何性能问题,并能够像以前一样使用全屏图像?

guz6ccqo

guz6ccqo1#

确实很容易为Android 12配置我的旧实现,并让它具有相同的行为:首先,使用以下命令更改app/build.gradle文件:

android {
   compileSdkVersion 31
   ...
}
dependencies {
   ...
   implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
}

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

<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>

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

android:theme="@style/Theme.App.Starting"

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

@Override
  protected void onCreate(Bundle savedInstanceState) {
    androidx.core.splashscreen.SplashScreen.installSplashScreen(this); // native splash screen which will be skipped
    org.devio.rn.splashscreen.SplashScreen.show(this, true); // custom splash screen from react-native-splash-screen library
    super.onCreate(null);
  }

这将保持您的自定义启动屏幕实现,更重要的是,自定义设计能力。我在我的应用程序中做了这样的事情,一切都很完美,我的应用程序立即打开,并立即使用自定义图像飞溅。
P.S.我认为Instagram使用了相同的hack,因为Instagram应用程序(在React Native中,可能使用这个库)在Android 12上打开自定义splash,而不是原生的。

w6mmgewl

w6mmgewl2#

适用于使用Expo-Splash-Screen和Anton's answer更新版本的用户

  • android/app/build.gradle
android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
  • android/app/src/main/res/values/styles.xml
<resources xmlns:tools="http://schemas.android.com/tools">
      ...
      <style name="Theme.App.Starting" parent="Theme.SplashScreen">
        <item name="android:windowIsTranslucent">true</item>
        <item name="postSplashScreenTheme">@style/AppTheme</item>
      </style>
    </resources>
  • android/app/src/main/AndroidManifest.xml
<application>
    ...
    <activity android:theme="@style/Theme.App.Starting">
     ...
    </activity>
   
  </application>
  • android/app/src/main/java/.../MainActivity.java
@Override
  protected void onCreate(Bundle savedInstanceState) {
    // Set the theme to AppTheme BEFORE onCreate to support 
    // coloring the background, status bar, and navigation bar.
    // This is required for expo-splash-screen.
    androidx.core.splashscreen.SplashScreen.installSplashScreen(this);
    setTheme(R.style.AppTheme);
    super.onCreate(null);
  }

相关问题