在 React Native 上启动画面很快变成白色 Android

Splash Screen quickly turns to white on React Native Android

我在我的应用程序中添加了启动画面。初始屏幕加载但随后在应用程序加载之前变为白色约 5 秒。我想在应用程序出现之前让启动画面一直保持下去。


我尝试按照 Sooraj 在 this question 上的回答进行操作,但他们没有对他们的回答提供任何解释,因为它写在问题上是行不通的。不起作用的主要部分是 setContentView(R.layout.activity_splash); 行,当我尝试构建我的应用程序时它会产生错误。当我删除该行时,我的应用程序在安装后崩溃

MainActivity.java

package com.sealsounds;

import android.content.Intent;
import android.os.Bundle;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
import com.sealsounds.SplashActivity;

public class MainActivity extends ReactActivity {

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    @Override
    protected String getMainComponentName() {
        return "SealSounds";
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent i = new Intent(this, SplashActivity.class);
        startActivity(i);
    }

    @Override
    protected ReactActivityDelegate createReactActivityDelegate() {
        return new ReactActivityDelegate(this, getMainComponentName()) {
            @Override
            protected ReactRootView createRootView() {
                return new RNGestureHandlerEnabledRootView(MainActivity.this);
            }
        };
    }
}

SplashActivity.java

package com.sealsounds;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;

public class SplashActivity extends ReactActivity {

    private static int SPLASH_TIME_OUT = 5000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                finish();
            }
        }, SPLASH_TIME_OUT);
    }
}

您遇到这个问题的原因是:

 1. When  Javascript loads & the bridge is initialized.
 2. Then you see splash screen when the app is first booted up implemented on native side. 
 3. Now React Native initialize at that time we get a white
    screen for fraction of second

您可以按照本文添加启动画面这是实现启动画面的正确方法splash-screen-in-react-native

我删除了在之前的实现中添加的代码,并重新开始实现启动画面。

这些说明是根据 react-native-splash-screen 上的文档修改的,如果您还需要 iOS

的说明,可以访问此 link

在命令行上运行

yarn add react-native-splash-screen

编辑MainActivity.java

...
//Splash Screen stuff
import android.os.Bundle; 
import org.devio.rn.splashscreen.SplashScreen;
// for react-native-splash-screen < 0.3.1 replace the line above with the line below
//import com.cboy.rn.splashscreen.SplashScreenReactPackage;

public class MainActivity extends ReactActivity {

    ...    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this);  // here
        super.onCreate(savedInstanceState);
    }
    ...
}

在 app/src/main/res/layout 中创建一个名为 launch_screen.xml 的文件(如果布局文件夹不存在,则创建它)。该文件的内容应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/launch_screen" android:scaleType="centerCrop" />
</RelativeLayout>

创建启动屏幕图像并将其命名为 launch_screen.png 将其复制到 android/app/src/main/res

中的以下文件夹
drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-xxhdpi
drawable-xxxhdpi

将以下行添加到您的 App.js 主文件

import SplashScreen from 'react-native-splash-screen'

在您的主要 App.js class 中将以下内容添加到您的 ComponentDidMount() 函数

export default class App extends React.Component {
    ...
    componentDidMount() {
        SplashScreen.hide();
    }
    ...
}