在本教程的开始,就曾经提到过纯Rn和原生与RN混合开发的两种概念。之前的两个Demo如果不考虑难易程度的话,则为纯Rn应用开发。但在实际生产中,毕竟Rn的组件还不是那么完善,所以,当我们需要比较炫酷的动画效果或者在使用Rn组件时遇到诡异的坑而没有进展的时候,我们可以使用Rn与原生协同开发来实现最终效果。

React Native设计为可以在其基础上编写真正的原生代码,并且可以访问平台所有的能力。这是一个相对高级的特性,我们并不认为它应当在日常开发的过程中经常出现,但具备这样的能力是很重要的。如果React Native还不支持某个你需要的原生特性,你应当可以自己实现该特性的封装。(这就麻烦了)

下面,我们来介绍我们的Demo3,照例先给出效果图(Android):

(这个是在Demo2的样式基础上改的,由于Demo2的样式在Android上根本没法看,所以我适当增加了输入框的宽度,添加了marginBottom等…)

Demo3总共完成了两点:

从原生开机动画跳转到Rn登陆页面,从Rn主界面调用Native的Toast方法和获取字符串数据。

(一)从Rn页面调用Native的组件方法

假设我们希望可以从Javascript发起一个Toast消息(Android中的一种会在屏幕下方弹出、保持一段时间的消息通知):

使用AS导入Android文件夹下的gradle项目。

①第一步是先添加一个原生的类(CustomToastModule),让他继承ReactContextBaseJavaModule,  在这个方法中,我们主要的目的有两个,

1)重写getName方法,比如这里return的是NativeToastAndroid

2)重写一个show方法,里面有native实现的一些功能

最终的目的就是能在JavaScript中调用

NativeToastAndroid.show('这个弹窗来自Android ', NativeToastAndroid.SHORT );

来调起一个Toast通知。

备注:一个可选的方法getContants返回了需要导出给JavaScript使用的常量。它并不一定需要实现,但在定义一些可以被JavaScript同步访问到的预定义的值时非常有用。这样的话,JavaScript写SHORT或者LONG这边就能对应替换了

②再添加一个类(NativeToastAndroidReactPackage),继承ReactPackage,

这个类要将方法暴露出去,在应用的Package类的createNativeModules方法中添加这个模块,把我们的CustomToastModule加进去,让rn调用。

③在MainApplication中

这里是第三个需要修改的类,刚才定义完ToastAndroidReactPackage方法的时候,需要在这里最终注册

添加到return列表里。

④从AS中切回Rn中,

这个方法不是必须的,为了让你的功能从JavaScript端访问起来更为方便,通常我们都会把原生模块封装成一个JavaScript模块。

这不是必须的,但省下了每次页面在使用之前,

都从NativeModules中获取对应模块( . NativeToastAndroid)  的步骤。这个JS文件也可以用于添加一些其他JavaScript端实现的功能(也就是说不必单拉出一个文件来实现这个东西,作者是为了方便阅读,才单建立的目录)。

⑤调用的时候,从上面引入

备注:从Rn调用Android的Toast组件我们已经写完了,那么有些同学可能要问了,那要从Native向Js传递数据该咋办?其实非常简单,而且又多种实现的方式,这里只列举一种:

在刚才的show方法下面再弄一个dataToJs,写法如上,然后在Rn的js中这样添加:

就完成了效果图中的Alert弹窗展示从Native端拿到的数据了,

至于其他的获取方式请参考Rn中文网链接:

注意:Rn也并没有封装全部的UI组件,只是封装了一部分,要想自己封装,提供一个ImageView之类的UI组件,则需要

①创建一个ViewManager的子类。

②实现createViewInstance方法。

③导出视图的属性设置器:使用@ReactProp(或@ReactPropGroup)注解。

④把这个视图管理类注册到应用程序包的createViewManagers里。

⑤实现JavaScript模块。

在这里就不详细介绍了,请想深入了解的朋友去Rn中文网上阅读相关内容:

(二)加入原生开机动画AwesomeSplash

下面说下如何从炫酷的开机动画跳转到我们的Rn页面,其实非常简单,在GitHub上可以参看到AwesomeSplash的使用方法,

注意,他有一行注释,就是千万不要复写onCreate方法,所以,如果你和我一样是新建了一个activity,就要删掉你的onCreate方法。

而且还要从git-AwesomeSplash上面的Demo中把对应的缺失的文件补充进来,在下面的animationsFinished方法中创建跳转意图,跳转到RN的Activity页面。

最后从配置文件中,把我们的AnimActivity设置为启动页面即可。

备注:可能有些人要问了,你这是RN项目中集成Native页面,那如果是原有的Native项目该怎么去集成Rn页面呢?

其实我感觉原理是差不多的,类似于环境转移,比照着Rn项目生成的Native壳子里面的配置,去给我们自己之前的Native项目添加Rn支持,最后还是Native页面跳RnActivity或者RnFragment。

比如首先配置build.gradle,然后再还需添加react native的DevSettingActivity,写类继承ReactActivity,提供一个实现ReactApplication的全局Application文件等等…如果想了解具体步骤的话可以参看:http://lib.csdn.net/article/reactnative/50089

总结:

好了,Demo3也讲完了,现在我们来看下如果要进行一个Rn的项目开发大概需要进行哪些准备设计工作?

①设计组件数量,设计应用页面到底该由哪些组件构成,组件的子组件数量

组件的划分遵循单一责任原则。

②Redux的状态数的设计,(结合Demo2)

③路由的设计,页面的组合方式(结合Demo2)

④是不是需要使用Native代码配合

android跳转到rn界面,第五章 RN与Native—由原生页面跳转到Rn页面;在Rn页面调用Android Native组件和Native数据...相关推荐

  1. java web小记response.sendRedirect,RequestDispatcher对象的forward方法实现页面跳转

     Java Web开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户响应,用常有两种方式: 1.通过response对象的sendRedirect方法. 2.通过Reques ...

  2. javascript高级程序设计 学习笔记 第五章 上

      第五章   引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScri ...

  3. 【python第五章——函数】

    python第五章--函数 第五章--函数 5.1函数概述 5.2 函数进阶 下面部分之后再写 5.3函数习题(一些小例子) 第五章--函数 5.1函数概述 快速入门: #定义函数 def func( ...

  4. 疯狂java讲义第五章课后习题答案

    1.编写一个学生类,提供name.age.gender.phone.address.cmail成员变量,且为每个成员变量提供 seter.geter方法.为学生类提供默认的构造器和带所有成员变量的构造 ...

  5. Hbase高手之路 -- 第五章 -- HBase的Java API编程

    Hbase高手之路 – 第五章 – HBase的Java API编程 一. 需求与数据集 某自来水公司,需要存储大量的缴费明细数据,以下截取了缴费明细的一部分内容: 因为缴费明细的数据记录非常庞大,该 ...

  6. Android 跳转权限设置界面的终极方案

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10338377.html 有时候APP需要获取某些权限,要让用户手动打开,那么问题来了,若是直接提醒用户出 ...

  7. android home跳转,Android 中按home键和跳转到主界面的实例代码

    Android 中按home键和跳转到主界面的实例代码 //home Intent intent= new Intent(Intent.ACTION_MAIN); intent.setFlags(In ...

  8. Android跳转动画时长,Android_Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转,需求:Activity(fragment)跳转的时候 - phpStudy...

    Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转 需求:Activity(fragment)跳转的时候当前界面裂开,上下各自拉出手机屏幕,之后跳转到相对应的Activity.整体效果图如下 ...

  9. android 强制打开gps定位_Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 然后java代码中动态申请 ...

  10. android 用包名、类名跳转到系统设置界面(任一界面)

    一般情况下,打开系统某个界面,使用系统唯一标识:Settings.xxx 但是在有些不同的机器不一定适用. 也要查询不同界面对应的唯一标识:具体可以查看:Android中跳转到系统设置界面大全 cmd ...

最新文章

  1. 任意用户密码重置(四):重置凭证未校验
  2. Acwing第 2 场周赛【完结】
  3. java 几个线程池的理解
  4. linux系统支持u盘格式,linux下U盘格式化
  5. xgboost参数_XGBoost实战和参数详解
  6. Unreal Engine 4 编码规范
  7. oracle analyze 全部表,Oracle analyze table
  8. 程序猿,这里有你想学的10门机器学习课程 | 资源
  9. 在不熟悉C/C++情况下,hook windows事件
  10. JDK源码学习笔记——String
  11. 冒泡排序+查找打印——上海大学C语言考试
  12. 前端JavaScript之DOM事件操作~都是干货
  13. package的创建安装和使用
  14. 如何去掉windows2003的自动锁定(每离开一会都会出现这个界面,不想让它出现)...
  15. c语言编写记账程序,C语言会计记账管理系统
  16. localhost:3000 拒绝访问解决办法
  17. 矩阵理论(三)向量矩阵的求导
  18. cs1.6一直连接服务器,CS1.6连接不上服务器解决办法
  19. RL 实践(3)—— 悬崖漫步【QLearning Sarsa 各种变体】
  20. 爬虫进阶-如何进行app爬取

热门文章

  1. AD域组策略安全管理
  2. DH坐标系的建立与DH表—机器人学
  3. 电脑出现ntldr is missing无法开机怎么办
  4. cmdline-tools component is missing
  5. Qt安装包下载(Windows平台)
  6. android 计算屏幕尺寸来区分phone和pad
  7. java实现角色+武器攻击小游戏
  8. FPGA同步复位、异步复位、异步复位同步释放
  9. 电脑qq传到我的android文件在哪里,怎么找到已经发送到手机微信和QQ上的资料保存文件夹(安卓)...
  10. 读书百客:《临江仙引·画舸》赏析