React Native 调用原生Android组件

在如今的App中,已经有成千上万的原生UI部件了——其中的一些是平台的一部分,另一些可能来自于一些第三方库,而且可能你自己还收藏了很多。React Native已经封装了大部分最常见的组件,譬如ScrollView和TextInput,但不可能封装全部组件。而且,说不定你曾经为自己以前的App还封装过一些组件,React Native肯定没法包含它们。幸运的是,在React Naitve应用程序中封装和植入已有的组件非常简单。

比如WebView,官方并没有提供Android端的实现,那么我们现在就动手封装一下WebView。

首先,我需要继承SimpleViewManager这个泛型类,和原生模块类似,需要重写getName()方法,将UI组件名称暴露给javascript层,接着需要重写createViewInstance方法,在里面返回我们需要使用的原生UI组件的实例,这里就是WebView。然后就是暴露一些必要属性给javascript层,为了简单起见,我们这里只暴露两个属性,一个是url,一个是html,一旦javascript层设置了url,就会加载一个网页,而一旦设置了html,则会去加载这段html,而属性的暴露是使用注解,将注解设置在对应的set方法上,之后再set方法中处理UI的更新,比如一旦设置了url,在setUrl里面就要加载网页。最终我们的ViewManager就是这样子的

首先注意导包

其次主要代码

public class ReactWebViewManager extends SimpleViewManager<WebView> {

public static final String REACT_CLASS = "RCTWebView";

@Override

public String getName() {

return REACT_CLASS;

}

@Override

protected WebView createViewInstance(ThemedReactContext reactContext) {

WebView webView= new WebView(reactContext);

webView.setWebViewClient(new WebViewClient(){

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

});

return webView;

}

@ReactProp(name = "url")

public void setUrl(WebView view,@Nullable String url) {

Log.e("TAG", "setUrl");

view.loadUrl(url);

}

@ReactProp(name = "html")

public void setHtml(WebView view,@Nullable String html) {

Log.e("TAG", "setHtml");

view.loadData(html, "text/html; charset=utf-8", "UTF-8");

}

}

和原生模块一样,原生UI组件也需要进行注册,实现ReactPackage接口,进行WebView的注册。

将这个ReactPackage添加到ReactInstanceManager实例中去,在MainActivty中

然后在javascript层新建一个WebView.js文件。输入下面的内容

到目前为止,你已经可以使用这个WebView组件了。

var WebView=require(‘./WebView‘);

render: function() {

return (

<View style={styles.container}>

<WebView  url="https://www.baidu.com" style={{width:200,height:400}}></WebView>

</View>

);

},

时间: 2024-10-18 01:58:36

React Native 调用原生Android组件的相关文章

Android React Native使用原生UI组件

Android React Native 已经将几个常用的原生组件进行了封装,比如 ScrollView 和 TextInput,但是并不是所有系统的原始组件都被封装了,因此有的时候我们不得不自己动手封装一下,从而能够使用那些React Native没有为我们封装的原生组件,比如WebView,官方并没有提供Android端的实现,那么我们现在就动手封装一下WebView. 之前写过一篇文章Android React Native使用原生模块,而使用原生UI组件的方法和使用原生模块的方法十分类似

【React Native开发】React Native移植原生Android项目

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50519677 本文出自:[江清清的博客] (一)前言 [好消息]个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org 前三节课程我们已经对于React Native For Android的环境搭建,IDE安装配置以及应用运行,调试相关的知识点做了讲解.今天我们来讲一个非常有用的知识点.移植我们已有

React Native iOS原生模块开发实战|教程|心得|如何创建React Native iOS原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691432) 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得,来分享给大家,但实在抽不开身,今天看了一下日历发现马上就春节了,所以就赶在春节之前将这篇博文写好并发布(其实是两篇:要看Android篇的点这里<React Native Android原生模块开发>). 我平时在用React Nativ

推荐 11 款 React Native 开源移动 UI 组件

推荐 11 款 React Native 开源移动 UI 组件 oschina 发布于 10个月前,共有 14 条评论 本文推荐 11 个非常棒的 React Native 开源组件,希望能给移动应用开发者提供帮助. React Native 是近期 Facebook 基于 MIT 协议开源的原生移动应用开发框架,已经用于 Facebook 的生产环境.React Native 可以使用最近非常流行的 React.js 库来开发 iOS 和 Android 原生 APP. 1. iOS 表单处理

Android React Native使用原生模块

有时候我们的App需要访问平台API,并且React Native可能还没有相应的模块包装:或者你需要复用一些Java代码,而不是用Javascript重新实现一遍:又或者你需要实现某些高性能的.多线程的代码,譬如图片处理.数据库.或者各种高级扩展等等. 而用React Native可以在它的基础上编写真正原生的代码,并且可以访问平台所有的能力.如果React Native还不支持某个你需要的原生特性,你应当可以自己实现该特性的封装. 不过在开始编写代码使用原生模块前,有一个知识点需要掌握,免得

React Native跳转Android原生界面

摘要:故事发生的起因是RN android因为获取一个验证码cookie的后续问题太麻烦 RN注册监听 componentWillMount(){ InteractionManager.runAfterInteractions(()=>{ this.passwordListener=DeviceEventEmitter.addListener('PassWordMessage',this.receiveAndroidMessage); this.startMyActivity(); }) } R

React Native知识5-Touchable类组件

React Native 没有像web那样可以给元素绑定click事件,前面我们已经知道Text组件有onPress事件,为了给其他组件 也绑定点击事件,React Native提供了3个组件来做这件事. 1.TouchableHighlight:高亮触摸,用户点击时,会产生高亮效果. 2.TouchableOpacity:透明触摸.用户点击时,点击的组件会出现透明效果. 3.TouchableWithoutFeedback:无反馈性触摸.用户点击时无任何视觉效果. 注意:只支持一个子节点,如果

8、手把手教React Native实战之ReactJS组件生命周期

1.创建阶段 getDefaultProps:处理props的默认值 在React.createClass调用 2.实例化阶段 React.render(<HelloMessage 启动之后 getInitialState.componentWillMount.render.componentDidMount state:组件的属性,主要是用来存储组件自身需要的数据,每次数据的更新都是通过修改state属性的值,ReactJS内部会监听state属性的变化,一旦发生变化的话,就会主动触发组件的r

React Native集成到Android项目当中

集成到Android项目当中 安装JavaScript依赖包 在项目根目录下创建一个名为package.json的空文本文件,然后填入以下内 { "name": "MyReactNativeApp", "version": "0.0.1", "private": true, "scripts": { "start": "node node_modules/r