これからインストールしたデフォルトの反応ネイティブプロジェクトがあります turorial と this tutorial を使用してプロジェクトにスプラッシュスクリーンを追加しました。しかし、今私は得ます:
この問題を解決するための最良かつ最も標準的な方法は何ですか?スプラッシュスクリーンが1秒間必要で、その後アプリが起動するはずです。より多くの記事が、私は反応ネイティブの修正を見つけることができませんでした。
<application
Android:name=".MainApplication"
Android:allowBackup="true"
Android:label="@string/app_name"
Android:icon="@mipmap/ic_launcher"
Android:theme="@style/AppTheme">
<activity
Android:name=".SplashActivity"
Android:label="@string/app_name"
Android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
Android:windowSoftInputMode="adjustResize"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name=".MainActivity" />
<activity Android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
最初:
実行npm i react-native-splash-screen --save
2番目のステップ(プラグインのインストール):
自動インストール
react-native link react-native-splash-screen or rnpm link react-native-splash-screen
手動インストール
Android:
1:Android/settings.gradle
ファイルで、次の追加を行います。
include ':react-native-splash-screen'
project(':react-native-splash-screen').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-screen/Android')
2:Android/app/build.gradleファイルに、:react-native-splash-screen
プロジェクトをコンパイル時の依存関係として追加します。
...
dependencies {
...
compile project(':react-native-splash-screen')
}
3:次の変更により、MainApplication.Javaファイルを更新してreact-native-splash-screen
を使用します。
// react-native-splash-screen >= 0.3.1
import org.devio.rn.splashscreen.SplashScreenReactPackage;
// react-native-splash-screen < 0.3.1
import com.cboy.rn.splashscreen.SplashScreenReactPackage;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new SplashScreenReactPackage() //here
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}
サンプルコード:
import React, {Component} from 'react';
import {
StyleSheet,
View,
Text,
TouchableOpacity,
Linking,
} from 'react-native'
import SplashScreen from 'react-native-splash-screen'
export default class example extends Component {
componentDidMount() {
SplashScreen.hide();
}
render() {
return (
<TouchableOpacity
style={styles.container}
onPress={(e)=> {
Linking.openURL('http://www.devio.org/');
}}
>
<View >
<Text style={styles.item}>
SplashScreen 启动屏
</Text>
<Text style={styles.item}>
@:http://www.devio.org/
</Text>
<Text style={styles.item}>
GitHub:https://github.com/crazycodeboy
</Text>
<Text style={styles.item}>
Email:[email protected]
</Text>
</View>
</TouchableOpacity>
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f3f2f2',
marginTop: 30
},
item: {
fontSize: 20,
},
line: {
flex: 1,
height: 0.3,
backgroundColor: 'darkgray',
},
})
IOSとAndroidの両方の別のソリューションを次に示します: https://github.com/mehcode/rn-splash-screen 。 app.tsx(エントリポイント)のrender関数でスプラッシュスクリーンを非表示にし、すべてのhttpsリクエストが完了するまで同じ画像を表示しました。
私のコード:
public render()
{
SplashScreen.hide();
//after everything has finished loading - show my app.
if (this.state.isFinishedloading)
{
return (
<this.navigator screenProps={{ ...providers }} />
);
}
// Until then show the same image as the splash screen with an ActivityIndicator.
return (
<View style={{ flex: 1 }}>
<Image style={styles.image} source={require('../assets/img/splash.png')} >
<ActivityIndicator style={styles.indicator} color="#fff"></ActivityIndicator>
</Image>
</View>
);
}
私もこの問題を経験しました。私の場合、永続化状態をストレージから抽出してレデューサーにフィードするために使用するのはredux永続ライブラリであり、このプロセスはその1秒の間にほぼ1秒かかり、白い画面をちらつき表示して実際の画面をレンダリングしていました。
私が使用した回避策は、これが実際にはスプラッシュを非表示にするコントロールがJavaScript側にあることです。
componentDidMount() {
SplashScreen.hide();
}
少し遅延を追加するだけで問題なく動作します。
componentDidMount() {
setTimeout(() => SplashScreen.hide() , 2000);
}
この問題が発生したため、デバッグに多くの時間を費やしました。
解決策:CSSプロパティが私のコンポーネントの1つで重複していました。重複を削除すると、白い画面の問題が修正されました。
私は @ sergiulucaci on GitHub で言及されている手順に従ってこれを修正し、うまくいきました
Android/app/src/main/res/values/styles.xmlに移動します
次のようにアプリのプレビューを無効にします:
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:windowDisablePreview">true</item> // <--- ADD THIS
// Other items...
</style>
</resources>