react native 项目默认是没有图标,并且启动页面只有文字。这个样子并不能算是一个完整的APP,现在就给APP加一个图标和一个适应所有屏幕尺寸的启动图,并且设置启动图遮住项目启动时候的白色闪屏。

首先我们来创建一个新项目

  1. react-native init splashExample

首先我们修改应用名称

Android

编辑 android/app/src/main/res/values/strings.xml 文件:

  1. <resources>
  2. <!-- <string name="app_name">splashExample</string> -->
  3. <string name="app_name">测试程序</string>
  4. </resources>

接下来是图片的准备

先从图标开始,一套图标需要各种大大小小的尺寸。

如果没有设计师朋友的话,我们可以用工具批量生成,现在需要一张1024*1024的母版即可。

图片链接

https://raw.githubusercontent.com/kk412027247/splashExample/master/image/icon.png

图片处理工具

https://icon.wuruihong.com/



上传之后处理之后,会下载得到一个压缩包,解压之后会看到得到了一堆各种尺寸的图标文件。



我们可以直接用生成好的内容替换默认的图标即可。

1.Android

替换 android/app/src/main/res 下对应的图标。



运行项目看我们的图标改了没有





我们会发现测试机上面出现了APP图标,并且更改了名字为测试程序

接下来我们给react-native项目添加启动页

Android

添加启动页可以使用 react-native-splash-screen 库,通过它可以控制启动页的显示和隐藏。

第一步:安装$ yarn add react-native-splash-screen

第二步:编辑 MainActivity.java,添加显示启动页的代码:

整理启动屏图片

现在开始添加启动页面,启动页面的操作需要写IOS与安卓的源码,但是也没太复杂,跟着一步步来即可。

这里提供了三张不同分辨率,但是和图标一样的启动图,这样用户在点击图标的时候,视觉上感觉是进入了app。

我们先改一下app页面的背景颜色,以及状态栏的颜色,编辑 app.js,整体代码如下

  1. /**
  2. * Sample React Native App
  3. * https://github.com/facebook/react-native
  4. *
  5. * @format
  6. * @flow
  7. */
  8. import React, {Component} from 'react';
  9. import {Platform, StyleSheet, Text, View,StatusBar} from 'react-native';
  10. const instructions = Platform.select({
  11. ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu',
  12. android:
  13. 'Double tap R on your keyboard to reload,\n' +
  14. 'Shake or press menu button for dev menu',
  15. });
  16. type Props = {};
  17. export default class App extends Component<Props> {
  18. render() {
  19. return (
  20. <View style={styles.container}>
  21. <StatusBar
  22. backgroundColor={'#4f6d7a'}
  23. barStyle={'light-content'}
  24. />
  25. <Text style={styles.welcome}>Welcome to React Native!</Text>
  26. <Text style={styles.instructions}>To get started, edit App.js</Text>
  27. <Text style={styles.instructions}>{instructions}</Text>
  28. </View>
  29. );
  30. }
  31. }
  32. const styles = StyleSheet.create({
  33. container: {
  34. flex: 1,
  35. justifyContent: 'center',
  36. alignItems: 'center',
  37. backgroundColor: '#4f6d7a',
  38. },
  39. welcome: {
  40. fontSize: 20,
  41. textAlign: 'center',
  42. margin: 10,
  43. color: '#f5fcff',
  44. },
  45. instructions: {
  46. textAlign: 'center',
  47. color: '#f5fcff',
  48. marginBottom: 5,
  49. },
  50. });

修改好的页面如下

添加安卓启动屏

首先需要先把不同尺寸的图片放到资源文件夹。

splashExample/android/app/src/main/res 目录下有几个mipmap文件夹,根据以下的规则把图片拖进去,然后把文件名统一改成splash.png。

  1. mipmap-mdpi = splash.png
  2. mipmap-hdpi = splash@2x.png
  3. mipmap-xhdpi = splash@3x.png
  4. mipmap-xxhdpi = splash@3x.png

在splashExample/android/app/src/main/res文件夹下新建layout文件夹,在layout文件夹中新建launch_screen.xml



编辑launch_screen.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:background="@color/blue"
  7. android:gravity="center">
  8. <ImageView
  9. android:layout_width="200dp"
  10. android:layout_height="200dp"
  11. android:src="@mipmap/splash"
  12. />
  13. </LinearLayout>

这个页面也就是启动屏。

如果要调整页面填充拉伸之类的,可以在Android Atudio 的Design可视化模式调整。

在splashExample/android/app/src/main/res/values文件夹下新建colors.xml,并编辑。



到这里定义一个和背景颜色一样的颜色名。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <color name="blue">#4F6D7A</color>
  4. </resources>

编辑splashExample/android/app/src/main/res/values/styles.xm文件,增加以下代码。

  1. <resources>
  2. <!-- Base application theme. -->
  3. <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  4. <!-- Customize your theme here. -->
  5. <!--设置透明背景-->
  6. <item name="android:windowIsTranslucent">true</item>
  7. </style>
  8. </resources>

这个页面会和启动页一起弹起,并且挡在启动页前面,所以要把这页设成透明。

编辑android/app/src/main/java/com/splashexample/MainActivity.java

  1. package com.splashexample;
  2. import android.os.Bundle;
  3. import com.facebook.react.ReactActivity;
  4. import org.devio.rn.splashscreen.SplashScreen;
  5. public class MainActivity extends ReactActivity {
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. // 这里定义了在加载js的时候,同时弹起启动屏
  9. // 第二个参数true,是启动页全屏显示,隐藏了状态栏。
  10. SplashScreen.show(this, true);
  11. super.onCreate(savedInstanceState);
  12. }
  13. /**
  14. * Returns the name of the main component registered from JavaScript.
  15. * This is used to schedule rendering of the component.
  16. */
  17. @Override
  18. protected String getMainComponentName() {
  19. return "splashExample";
  20. }
  21. }

最后一步运行项目

即可

给react-native添加图标和启动屏的更多相关文章

  1. react native 添加第三方插件react-native-orientation(横竖屏设置功能 android)

    Installation 1.install  rnpm Run  npm install -g rnpm 2.via rnpm Run rnpm install react-native-orien ...

  2. React Native学习-控制横竖屏第三方组件:react-native-orientation

    在项目中,有时候可能会想使不同的页面显示的横竖屏也不一样,比如前一段我做的<广播体操>的项目,在首页面,肯定是想使页面为竖屏显示,但是播放页面要为横屏显示,即使用户的手机可以转屏,我们的播 ...

  3. React Native 首次加载白屏优化

    RN首次加载都会有个白屏过程,一般都会有500ms+的白屏时间,原生页面开发同样的页面会能够快速显示而在RN页面中有个明显的等待过程,这个会影响用户体验. 1.使用过渡页面 简单处理可以在白屏过程中加 ...

  4. React Native踩坑之启动android模拟器失败

    报错 Could not install the app on the device, read the error above for details.Make sure you have an A ...

  5. React native 之 图标库ECharts的使用

    github地址:https://github.com/somonus/react-native-echarts 官网:https://www.echartsjs.com/zh/tutorial.ht ...

  6. React Native 之项目的启动

    运行项目有两种方法 1. 到根目录,执行 react-native run-ios 命令 会开启一个本地服务,加载jsbundle文件,然后是去index.js文件 import {AppRegist ...

  7. react native 添加mobx

    "babel-plugin-transform-decorators-legacy": "^1.3.5", "babel-preset-react-n ...

  8. 腾讯优测优分享 | 探索react native首屏渲染最佳实践

    腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...

  9. 探索react native首屏渲染最佳实践

    文 / 腾讯 龚麒 0.前言 react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react n ...

随机推荐

  1. 南京邮电大学 JavaA期末复习要点总结

    南京邮电大学 JavaA复习要点: Chap1 入门 1.  Java应用程序开发过程教材P14~P15 Chap 2 基本语法 1.      标识符的命名规则教材P19 字母下划线美元符号开头,除 ...

  2. C# 进程间通讯

    扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1)共享内存 包括:内存映射文件,共享 ...

  3. call、apply的作用和区别是什么?

    call().apply()的区别: 相同点: 1.call()和apply()都可以用来间接调用函数,都可以显式调用所需的this.即,任何函数可以作为任何对象的方法来调用. 2.两个方法都可以指定 ...

  4. 关于clone(java.lang.Object)重写

    1. 需要实现接口java.lang.Cloneable 2. 重写java.lang.Object的clone 3. clone访问权限扩大为public 4. 不实现(java.lang.Clon ...

  5. IIS 反向代理到 Apache、Tomcat

    将请求的网址重写重定向到其它网址.当80端口被占用无法同时使用两个Web服务的解决方案,使得IIS和Apache Tomcat 共存 环境 WindowServer 2008 IIS7 Apache ...

  6. Python 函数调用&定义函数&函数参数

    一.函数调用 在python中内置了很多函数,我们可以直接调用 .想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3 ...

  7. 2017 百度杯丶春秋欢乐赛 writeup

    1. 内涵图(Misc) 题目: 我不是一个简单的图片 我是一个有内涵的图片 解:保存到桌面,右键属性->详细信息,即可获得flag. 2. 小电影(Misc) 题目: 我说过 这次比赛是让大家 ...

  8. springMVC框架核心方法调用源码解析

  9. ERROR in static/js/0.5d7325513eec31f1e291.js from UglifyJs

    今天把vue项目打包是遇到这个问题.这是在服务器上打包时报的错误,本地打包不报错!很头疼!上网查了很多,发现有很多人和我遇到类似的问题,但是都没有解决我的问题!后来灵机一动,解决问题,这就跟大家说一下 ...

  10. SQL UNIQUE 约束

    SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...