React Native Android 启动画面始终打开

React Native Android Splash Screen Always On

第一次设置 React Native 启动画面时遇到了一个我无法解决的小错误。

我关注了这篇文章并且我完全按照了它(现在 IOS 部分除外)https://medium.com/@appstud/add-a-splash-screen-to-a-react-native-app-810492e773f9

我已经在 google 等网站上搜索过类似的问题,但我没有找到任何与我的问题相似的人。

这是我的 addad/modified 文章中的文件:

已安装 npm 包 npm install react-native-splash-screen --save.

android/app/src/main/res/drawable/background_splash.xml:

 <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:drawable="@color/splashscreen_bg"/>
        <item
            android:width="300dp"
            android:height="300dp"
            android:drawable="@mipmap/splash_icon"
            android:gravity="center" />
    </layer-list>

AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:roundIcon="@mipmap/ic_launcher_round"
  android:allowBackup="false"
  android:theme="@style/AppTheme">

    <!-- Add this SplashActivity -->
    <activity
      android:name=".SplashActivity"
      android:theme="@style/SplashTheme"
      android:label="@string/app_name">
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    <!-- Remove the intent-filter of the MainActivity and add a param android:exported="true" -->
    <activity
      android:name=".MainActivity"
      android:label="@string/app_name"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
      android:windowSoftInputMode="adjustResize"
      android:exported="true"/>

  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

android/app/src/main/java/[your_package_name]/SplashActivity.java:

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class SplashActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

android/app/src/main/java/[your_package_name]/MainActivity.java:

import com.facebook.react.ReactActivity;
import org.devio.rn.splashscreen.SplashScreen;
import android.os.Bundle;

public class MainActivity extends ReactActivity {

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

  @Override
  protected String getMainComponentName() {
    return "nameOfPackage";
  }
}

我遗漏了所有 android 样式文件(认为它们不相关等)。我在 Android 开发或 Java 方面也完全没有经验(不过我可以阅读),这就是我问这个问题的原因。

如果我删除

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

MainActivity 中,当内容准备好显示时启动画面消失,但是,启动画面的背景会持续一两秒钟。然后我被告知在上面添加这段代码,以便我无缝地移动到内容,但这是初始屏幕停留的地方,添加了上面的代码。我尝试在 onCreate 之后执行 SplashScreen.hide(this),但没有任何帮助(同样,不知道 android 开发或 java)。

非常感谢您抽出时间!

您将在 javascript 端使用 SplashScreen.hide()。 当您准备好隐藏启动画面时,您需要在您的组件中 运行 SplashScreen.hide()。 您还需要导入 SplashScreen

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