유블로그

[React Native] 앱 첫 로딩 실행 화면 (Splash 화면) 구현 본문

React

[React Native] 앱 첫 로딩 실행 화면 (Splash 화면) 구현

yujeong kang 2021. 5. 5. 21:03

1. npm 으로 설치

$ npm i react-native-splash-screen --save

www.npmjs.com/package/react-native-splash-screen

 

react-native-splash-screen

A splash screen for react-native, hide when application loaded ,it works on iOS and Android.

www.npmjs.com

 

2. MainActivity.java 수정

package com.frontend;

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

public class MainActivity extends ReactActivity {

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

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

 

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

 

4. splash 이미지 추가 - launch_screen.png

app/src/main/res 에 있는 폴더들에

모두 같은 이미지를 넣어준다.

 

파일이름은 무조건 'launch_screen.png' 로 해야한다. 

 

 

 

5. app/src/main/res/values/colors.xml 생성

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="primary_dark">#000000</color>
</resources>

 

6. 상태바 커스텀 (필수 x)

나는 splash 이미지와 동일한 색상의 상태바를 원했기 때문에 이 step 을 진행했다.

android/app/src/main/res/values/colors.xml 를 수정한다. (5에서 추가)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="primary_dark">#000000</color>
    <color name="status_bar_color">원하는 색상코드</color>
</resources>

android/app/src/main/res/values/styles.xml 수정

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:textColor">#000000</item>
    </style>

	<!-- 추가 -->
    <style name="SplashScreenTheme" parent="SplashScreen_SplashTheme">
        <item name="colorPrimaryDark">@color/status_bar_color</item>
    </style>
</resources>

 

7. 2번을 수정한다.

SplashScreen.show(this); 를

SplashScreen.show(this, R.style.SplashScreenTheme);

이렇게 수정!

 

 

8. App.js 수정

import React, {useEffect} from 'react';
import {Provider} from 'react-redux';
import {configureStore} from '@reduxjs/toolkit';
import rootReducer from './src/modules';
import {NavigationContainer} from '@react-navigation/native';
import StackNav from './src/navigations/Stack';
import {shoppingListApi} from './src/lib/api/shoppingList';
import SplashScreen from 'react-native-splash-screen';	// 라이브러리 추가!!

const store = configureStore({
  reducer: rootReducer,
  middleware: getDefaultMiddleware =>
    getDefaultMiddleware({
      thunk: {
        extraArgument: shoppingListApi,
      },
      serializableCheck: false,
    }),
});

const App = () => {
	// SplachScreen hide 하는 코드 추가한다!!!!!
  useEffect(() => {
    SplashScreen.hide();
  }, []);
  return (
    <Provider store={store}>
      <NavigationContainer>
        <StackNav />
      </NavigationContainer>
    </Provider>
  );
};

export default App;

 

원래 자신의 코드에서 import 하고 App 에 useEffect 추가하면 된다.