React-Native App启动页制作(安卓端)
原文地址:React-Native App启动页制作(安卓端)
这篇文章是根据开源项目react-native-splash-screen来写的。在使用react-native-link命令安装该包后不知是何原因导致app无法运行了。issue也有很多用户说安装该包后项目出错。其实制作app启动页很简单,大可不必引用该包。下面开始正文。

app启动页第一是为了宣传,第二是为了防止在app初始化期间屏幕白屏。所以app启动页不能干扰mainActivity的加载。app启动页一般方法就是在mainActivity上创建一个全屏的dialog,页面加载完成后关闭该dialog。下面介绍在react-native中加入app启动页的方法。
首先创建一个dialog的全屏样式,在styles.xml中添加:
<style name="Dialog_Fullscreen">
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
</style>
然后创建一个dialog内部的布局文件,命名为activity_launch.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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/launch_screen">
</LinearLayout>
其中launch_screen为启动页图片,必须为png格式,位于drawable目录下。
创建类SplashScreen:
public class SplashScreen {
private static Dialog mSplashDialog;
// 显示启动页
public static void show(final Activity activity) {
mSplashDialog = new Dialog(activity,R.style.Dialog_Fullscreen); // 设置dialog全屏
mSplashDialog.setContentView(R.layout.activity_launch); // 设置dialog内容
mSplashDialog.setCancelable(false);
mSplashDialog.show();
}
// 关闭启动页
public static void hide(Activity activity) {
mSplashDialog.dismiss();
mSplashDialog = null;
}
}
在mainActivity创建时显示启动页,在MainActivity.java中添加:
@Override
protected void onCreate(Bundle savedInstanceState) {
SplashScreen.show(this);
super.onCreate(savedInstanceState);
}
对于rn项目,当HomePage执行到componentDidMount生命周期的时候,首屏渲染完毕,关闭启动页,故需要把类SplashScreen中的hide方法传递到js端。
创建ModuleHideSplash类继承ReactContextBaseJavaModule:
public class ModuleHideSplash extends ReactContextBaseJavaModule {
private Context context;
public ModuleHideSplash(ReactApplicationContext reactContext) {
super(reactContext);
context = reactContext;
}
@Override
public String getName() {
return "SplashScreen";
}
@ReactMethod
public void show() {
SplashScreen.show(getCurrentActivity());
}
@ReactMethod
public void hide() {
SplashScreen.hide(getCurrentActivity());
}
}
创建myPackge并添加 ModuleHideSplash实例:
public class MyPackage 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 ModuleHideSplash(reactContext));
return modules;
}
}
最后在MainApplication.java中注册package:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new MyPackage()
);
}
在js端关闭启动页:
import {NativeModules} from "react-native";
componentDidMount() {
NativeModules.SplashScreen.hide();
}
原文链接:http://bougieblog.cn/article/55
大功告成!
壁纸送给大家

React-Native App启动页制作(安卓端)的更多相关文章
- 利用 Create React Native App 快速创建 React Native 应用
本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...
- App启动页设计实例与技巧
App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...
- React Native APP结构探索
APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...
- App启动页倒计时功能
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6753418.html 示例代码采用 RxJava + RxLifecycle + Data-Binding ...
- React Native App设置&Android版发布
React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...
- React Native & app demos
React Native & app demos https://github.com/ReactNativeNews/React-Native-Apps https://github.com ...
- 用代码获取APP启动页图片
用代码获取APP启动页图片 源码 - swift // // AppleSystemService.swift // Swift-Animations // // Created by YouXian ...
- Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)
转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法 首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象 ...
- [译] Facebook:我们是如何构建第一个跨平台的 React Native APP
英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...
随机推荐
- [Angularjs-学习笔记]工具篇
因为一开始学习前端知识一直都是在慕课网,所以这次准备学习下angularjs等了好久,终于慕课网出了angularjs的内容,于是准备开始跟着老师的步骤进行学习. 大漠老师关于开发工具的内容讲得比较快 ...
- src路径
- [摘]Android逆向分析常用网站
androidterm: Android Terminal Emulator http://code.google.com/p/androidterm/ droidbox: Andro ...
- createprocess并行运算
#include "stdafx.h"#include "windows.h"#include <iostream> using namespace ...
- RegisterUserFunc为测试对象添加新方法或重写已有方法
QTP中为了提高扩展性,提供了一个为测试对象添加一个新的自定义方法,或者重写测试对象已有的方法的函数RegisterUserFunc,在此给大家分享一下. RegisterUserFunc:为测试对象 ...
- 正则表达式 notes
nfs 网络文件系统 存储类型:块存储,对象存储,文件存储 nfs属于文件存储 crond 分钟小时日月周 命令:绝对路径 命令是由crond解释 /bin/bash a.sh */2 * * * * ...
- Eclipse: “The import java.io cannot be resolved”
检查一下选项: 重点看jdk的绑定 43down voteaccepted Check your Eclipse preferences: Java -> Installed JREs. The ...
- docker 笔记(2) base镜像
base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ub ...
- 触摸事件MultiTouch Events
备注: userInteractionEnabled = NO hidden = YES alpha = 0.0~0.01 //如果上面三个属性被设置了则无法接收触摸事件 1.- (void)t ...
- FTP批量下载数据文件
包含ftp的命令脚本,建立临时文件. ::服务器连接信息 set username=root set password=root set ip=xxx.xxx.xxx.xxx set RemoteDi ...