React Native Android 启动画面始终开启

时间:2021-02-25 16:40:45

标签: react-native react-native-android

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

我遵循了这篇文章,并且完全遵循了它(目前除了 IOS 部分)https://medium.com/@appstud/add-a-splash-screen-to-a-react-native-app-810492e773f9

我在谷歌等上搜索过类似的问题,但没有找到任何与我的问题类似的问题。

这是我从文章中添加/修改的文件:

已安装的 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)。

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

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

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