React Native android Icon和启动页

React Native android Icon和启动页

1、Icon

android的图标的更改还是很简单的,简要的说一下

1、在项目根目录中进入一下路径:android/app/src/main/AndroidManifest.xml

红线标注的地方就是icon

icon的分辨率(包含圆角)

分辨率分别为72x72, 48x48, 96x96, 144x144

只需把下面路径的图片根据分辨率大小换掉就可以了

看下图路径,这样Android的icon就解决了

2、启动页

启动页相对复杂了一些

 **另外需注意你APP根目录名字有大写的时候,Java导入包同意写成小写**
 **例如:  APP名字是testTest时,Java导入包写成testtest**
 **package com.testtest;**
2.1 生成自己的启动页图标

推荐一个网址 https://apetools.webprofusion.com 可以生成一整套的图标

当然也是有缺点的

生成后你会得到如下图的文件

当然,你也可以自己做

2.2 把生成的图标放到指定的位置

android/app/src/main/res/

2.3 编写引入背景图片

首先要在android/app/src/main/res/创建一个文件夹layout

创建splash_screen.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/screen">  //引入图片地址
</LinearLayout>
2.4 编写样式

添加以下代码

路径: android/app/src/main/res/values/styles.xml

    <style name="SplashScreen_Fullscreen" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="windowActionBar">false</item>
        //一定要,否则有状态栏显示,不能全屏
        <item name="windowNoTitle">true</item>
    </style>
2.5 启动页的显示和关闭

路径: android/app/src/main/java/com/APPNAME/module/

若没有module,新建一个

1、创建SplashScreen类实现显示与关闭启动页的功能

package com.test.module;  //test为项目名(注意指定小写)

import android.app.Activity;
import android.app.Dialog;
import java.lang.ref.WeakReference;
import com.test.R;

public class SplashScreen {
    private static Dialog mSplashDialog;
    private static WeakReference<Activity> mActivity;

    /**
     * 打开启动屏
     */
    public static void show(final Activity activity,final boolean fullScreen) {
        if (activity == null) return;
        mActivity = new WeakReference<Activity>(activity);
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (!activity.isFinishing()) {

                    mSplashDialog = new Dialog(activity, R.style.SplashScreen_Fullscreen);
                    mSplashDialog.setContentView(R.layout.splash_screen);
                    mSplashDialog.setCancelable(false);

                    if (!mSplashDialog.isShowing()) {
                        mSplashDialog.show();
                    }
                }
            }
        });
    }
    /**
     * 打开启动屏
     */
    public static void show(final Activity activity) {
        show(activity,false);
    }

    /**
     * 关闭启动屏
     */
    public static void hide(Activity activity) {
        if (activity == null) activity = mActivity.get();
        if (activity == null) return;

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (mSplashDialog != null && mSplashDialog.isShowing()) {
                    mSplashDialog.dismiss();
                }
            }
        });
    }
}

2、创建SplashScreenModule类继承ReactContextBaseJavaModule

package com.test.module;  //test为项目名(注意指定小写)

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

public class SplashScreenModule extends ReactContextBaseJavaModule {
    public SplashScreenModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "SplashScreen";
    }

    /**
     * 打开启动屏
     */
    @ReactMethod
    public void show() {
        SplashScreen.show(getCurrentActivity());
    }

    /**
     * 关闭启动屏
     */
    @ReactMethod
    public void hide() {
        SplashScreen.hide(getCurrentActivity());
    }
}

3、创建SplashScreenReactPackage 并添加 SplashScreenModule实例

package com.test.module;   //test为项目名(注意指定小写)

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SplashScreenReactPackage implements ReactPackage {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public List<NativeModule> createNativeModules(
            ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new SplashScreenModule(reactContext));
        return modules;
    }
}

2.6 在MainActivity中添加启动时显示启动页

路径: android/app/src/main/java/com/APPNAME/MainActivity.java

在MainActivity类中添加

如果 Bundle 没引入被忘了引入

import android.os.Bundle;
import com.test.module.SplashScreen;  //test项目名(注意指定小写)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this,true);
        super.onCreate(savedInstanceState);
    }
2.7 最后在MainApplication.java中注册SplashScreenReactPackage

路径: android/app/src/main/java/com/APPNAME/MainApplication.java

需添加:

import com.test.module.SplashScreenReactPackage; //test项目名(注意指定小写)

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          new SplashScreenReactPackage()   //添加
      );
    }

到这里就结束了。

从新react-native run-android,应该就能显示出来了。

最后在APP的启动页添加隐藏启动页就OK了

	import {NativeModules} from 'react-native';
	var SplashScreen = NativeModules.SplashScreen;

    componentDidMount() {
       if (Platform.OS === 'android') {
           //安卓通过SplashScreen设置启动页
           this.timer = setTimeout(
               () => {
                   SplashScreen.hide();
               },
               500
           );
       }
   }
   //最后别忘了卸载 定时器
   componentWillUnmount(){
        this.timer && clearTimeout(this.timer);
    }

感谢下面大神的分享

1、React-Native App启动页制作(安卓端)

2、react native android应用启动画面

3、react-native APP图标和Splash(Android)

写在最后:

本人小白,文章是个人测试的,若有不足之处,望批评指正。

拜谢!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值