reactnative 桥接androidview的过程

1.android端集成SimpleViewManager<这里写组件的名字也可以是自定义过的组件>

2.复写createViewInstance通过这个方法来返回需要使用的原生的view

@Override

protected Button createViewInstance(ThemedReactContext reactContext) {

 this.mContext = reactContext; 

 Button button = new Button(reactContext);

button.setOnClickListener(new View.OnClickListener() {

@Override

    public void onClick(View view) {

WritableMap map = Arguments.createMap();

map.putString("msg","我是来自原生view的点击显示");

ReactContext context = (ReactContext)button.getContext();

context.getJSModule(RCTEventEmitter.class).receiveEvent(textView.getId(),"myclicked",map);

}

});

return button;

}

3.使用@ReactProp导出的是js设置的属性

@ReactProp(name = "msg")

public void setText(Button button,String text){ 

 button.setText(text);

}

4.在android原生端定义了使用的属性还需要定义一个类实现ReactPackage

//自定义RTCViewPackage

public classRTCViewPackage implements ReactPackage{ 

 @OverridepublicListcreateNativeModules(ReactApplicationContext reactContext){returnCollections.EMPTY_LIST; } @OverridepublicListcreateViewManagers(ReactApplicationContext reactContext){returnArrays.asList(new RCTButton()); }}


然后在MainApplication中的getPackages中进行注册

5 js端中引用原生端定义的view

'use strict';

import React, { Component } from 'react';

import {

    requireNativeComponent

} from 'react-native';

let RTCBtn = requireNativeComponent("RCTButton",RCTButton);

export default class RCTButton extends Component {

    render() {

        return <RTCBtn {...this.props}/>;

    }

}

requireNativeComponent关联js和原生组件,方法中的两个参数:第一个参数是原生封装该UI组件时的名称,对应getName返回值,第二个参数是你js端定义的名称。还可能存在第三个参数是一个对象

{

    nativeOnly:{

        myclicked:true

    }

}

这个参数是需要事件传递是你定义在android原生端的监听的名称 如果不加这个在js端直接引入会报错。

{...this.props} 必须有,否则组件不显示。

android端如果想收到事件的传递需要复写

@Override

public MapgetExportedCustomDirectEventTypeConstants(){returnMapBuilder.builder().put(“这里随意写”,MapBuilder.of("registrationName",“这里是你定义的监听的名称”)).build(); }}

之后才可以收到事件。

列如js端定义为RTCBtn


<RTCBtn

msg={'“面对疾风吧”}

myclicked={(event)=>{

console.log(event.nativeEvent.msg)

}}

/>

记录一下

本文参考:大佬的地址 @boyrt

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 7,860评论 1 18
  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 10,645评论 2 54
  • 海陆空军齐练兵, 铸就一身硬本领。 敌人胆敢来侵犯, 丢盔弃甲疲奔命。 注:打油诗。 照片来自网络。
    金赛月阅读 4,427评论 12 19
  • 以前,我认识一个女孩;那时候大一,看着别人在课余时间做兼职,感觉挺好玩,认识好多朋友,扩大交际圈。于是,那年冬天我...
    肉都给我吃阅读 2,924评论 0 2
  • 今天加班,中午吃饭时间很短,没有回家,就邀请亚伟一起去吃鸭血粉丝汤,算是今天的一个小互助吧! 感恩亲爱的石娜今天一...
    爱己及人阅读 1,540评论 0 0

友情链接更多精彩内容