React Native 中设置 APP 名称、图标和启动页

APP 开发完成后,我们需要修改 APP 名称并设置好应用图标和启动页,然后再发布上线。其中,名称和图标用于标识 APP,而启动页则可以增强应用程序启动时的用户体验、品牌推广等。本文总结了如何在 React Native 应用中完成名称、图标和启动页的设置。

修改名称

应用程序的名称默认是使用 react-native-cli 创建项目时的名称。修改的方式很简单,找到相应的配置然后修改即可。例如,我初始化的项目名称叫 test,现在想修改成 测试程序

Android

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

<resources>
-    <string name="app_name">test</string>
+    <string name="app_name">测试程序</string>   
</resources>

iOS

编辑 ios/test/Info.plist 文件:

<key>CFBundleDisplayName</key>
- <string>$(PRODUCT_NAME)</string>
+ <string>测试程序</string>

修改应用图标

应用图标对尺寸有要求,比较简单地方式是准备一张 1024*1024 的图片,然后使用图标工厂在线生成。

我这里直接从 Sketch iOS 图标设计模板中选取了一张图片,生成后的结果如下:

android_icon.png
ios_icon.png

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

  1. Android
    替换 android/app/src/main/res 下对应的图标。
  2. iOS
    替换 ios/test/Images.xcassets/AppIcon.appiconset 中的内容。如果不需要全部尺寸,可以用 XCode 打开项目,点击 Images.xcassets>AppIcon 拖入相应尺寸的图标。

添加启动页

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

$ yarn add react-native-splash-screen
$ react-native link react-native-splash-screen

Android

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

import android.os.Bundle; // here
import com.facebook.react.ReactActivity;
// react-native-splash-screen >= 0.3.1
import org.devio.rn.splashscreen.SplashScreen; // here
// react-native-splash-screen < 0.3.1
import com.cboy.rn.splashscreen.SplashScreen; // here

public class MainActivity extends ReactActivity {
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this);  // here
        super.onCreate(savedInstanceState);
    }
    // ...other code
}

android/app/src/main/res/layout 文件夹下创建启动页布局文件 launch_screen.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/launch_image">
</LinearLayout>

将启动页图片放置在 drawable 文件夹下。

  • drawable-ldpi
  • drawable-mdpi
  • drawable-hdpi
  • drawable-xhdpi
  • drawable-xxhdpi
  • drawable-xxxhdpi

Android 会自动缩放 drawable 下的图片,所以我们不必为所有分辨率的设备准备启动图。

完成上述操作后,重新打包应用,再启动时就可以看到启动页了。不过,启动页显示之前会有短暂的白屏,我们可以通过设置透明背景来处理。编辑 android/app/src/main/res/values/styles.xml 文件,修改如下:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
+        <item name="android:windowIsTranslucent">true</item>
    </style>
</resources>

iOS

编辑 ios/test/AppDelegate.m 文件:

#import "AppDelegate.h"

#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import "RNSplashScreen.h"  // here

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // ...other code

    [RNSplashScreen show];  // here
    return YES;
}

@end

用 XCode 打开项目,选中 LaunchScreen.xib 中的 View,取消选中 Use Launch Screen

cancel_launch_screen.png

选中项目,在 General 配置中设置 Launch Images Srouce,点击 Use Asset Catalog,弹出对话框中使用默认即可(此操作会在 Images.xcassets 中创建 LaunchImage),然后设置 Launch Screen File 为空。

use_asset_catalog.png

点击 Images.xcassets > LaunchImage,在右侧属性栏处选择要支持的设备。接着,添加对应分辨率的图片,分辨率对照如下:

设备 分辨率
iOS 11+ 1125*2436
iOS 8+ Retina HD 5.5 1242*2208
iOS 8+ Retina HD 4.7 750*1334
iOS 7+ 2x 640*960
iOS 7+ Retina 4 640*1136
iOS 5,6 1x 320*480
iOS 5,6 2x 640*960
iOS 5,6 Retina 4 640*1136
ios_launch.png

完成上述操作之后,重新安装 APP 再启动时就可以看到启动页。

隐藏启动页

到目前为止,可以发现打开 APP 后会一直停留在启动页面,我们可以在合适的时机(如所有资源准备完毕)调用 SplashScreen.hide(); 来隐藏启动页。

import { AppRegistry } from 'react-native';
import SplashScreen from 'react-native-splash-screen';

import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => {
  SplashScreen.hide();
  return App;
});
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,473评论 2 59
  • 还记得小学毕业时,妈妈给我购买了这本书——《平凡的世界》。 这是中国当代作家路遥的一部长篇巨著。它...
    ANDY贤阅读 252评论 0 0
  • 今天和先生、Peter、业务员聊了下关于线上的事情,启发很多,之前一心追求的东西现在看来还不是时机,只有脚踏实地一...
    王德彪阅读 146评论 0 0
  • 文:||18岁的小仙女🧚‍♀️ 年少的时候,每当看到电视或者剧本里的恋人,明明很相爱,可是最后还是分开的时候,我就...
    Visby阅读 907评论 4 1