栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从React Native Js代码调用Android Native UI组件方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从React Native Js代码调用Android Native UI组件方法

按照@agent_hunt给定的指针。

检查此博客进行解释

我在SignatureCaptureViewManager中使用了ui管理器命令。发布我的解决方案

public class SignatureCaptureViewManager extends ViewGroupManager<SignatureCaptureMainView> {private Activity mCurrentActivity;public static final String PROPS_SAVE_IMAGE_FILE="saveImageFileInExtStorage";public static final String PROPS_VIEW_MODE = "viewMode";public static final int COMMAND_SAVE_IMAGE = 1;public SignatureCaptureViewManager(Activity activity) {    mCurrentActivity = activity;}@Overridepublic String getName() {    return "SignatureView";}@ReactProp(name = PROPS_SAVE_IMAGE_FILE)public void setSaveImageFileInExtStorage(SignatureCaptureMainView view, @Nullable Boolean saveFile) {    Log.d("React View manager setSaveFileInExtStorage:", "" + saveFile);    if(view!=null){        view.setSaveFileInExtStorage(saveFile);    }}@ReactProp(name = PROPS_VIEW_MODE)public void setViewMode(SignatureCaptureMainView view, @Nullable String viewMode) {    Log.d("React View manager setViewMode:", "" + viewMode);    if(view!=null){        view.setViewMode(viewMode);    }}@Overridepublic SignatureCaptureMainView createViewInstance(ThemedReactContext context) {    Log.d("React"," View manager createViewInstance:");    return new SignatureCaptureMainView(context, mCurrentActivity);}@Overridepublic Map<String,Integer> getCommandsMap() {    Log.d("React"," View manager getCommandsMap:");    return MapBuilder.of( "saveImage", COMMAND_SAVE_IMAGE);}@Overridepublic void receiveCommand(        SignatureCaptureMainView view,        int commandType,        @Nullable ReadableArray args) {    Assertions.assertNotNull(view);    Assertions.assertNotNull(args);    switch (commandType) {        case COMMAND_SAVE_IMAGE: { view.saveImage(); return;        }        default: throw new IllegalArgumentException(String.format(         "Unsupported command %d received by %s.",         commandType,         getClass().getSimpleName()));    }}}

为了向ViewManager发送命令,我在Signature Capture组件中添加了此方法

class SignatureCapture extends React.Component {constructor() {super();this.onChange = this.onChange.bind(this);}onChange(event) {console.log("Signature  ON Change Event");if (!this.props.onSaveEvent) {  return;}this.props.onSaveEvent({  pathName: event.nativeEvent.pathName,  enpred: event.nativeEvent.enpred,}); } render() {  return (   <SignatureView {...this.props} style={{flex: 1}} onChange=      {this.onChange} />);  }saveImage(){ UIManager.dispatchViewManagerCommand(        React.findNodeHandle(this),        UIManager.SignatureView.Commands.saveImage,        [],    );   } }SignatureCapture.propTypes = {...View.propTypes,rotateClockwise: PropTypes.bool,square:PropTypes.bool,saveImageFileInExtStorage: PropTypes.bool,viewMode:PropTypes.string};  var SignatureView = requireNativeComponent('SignatureView',   SignatureCapture, { nativeOnly: {onChange: true} }); module.exports = SignatureCapture;

这就是我在父级Signature组件中使用SignatureCapture组件的方式

class Signature extends Component {render() {    return (        <View style={{ flex: 1, flexDirection: "column" }}> <SignatureCapture     style={{ flex: 8 }}     ref="sign",     onSaveEvent={this._onSaveEvent}     saveImageFileInExtStorage={false}     viewMode={"portrait"}/> <TouchableHighlight style={{ flex: 2 }}     onPress={() => { this.saveSign() } } >     <Text>Save</Text> </TouchableHighlight>        </View>    );}// Calls Save method of native view and triggers onSaveEvent callbacksaveSign() {    this.refs["sign"].saveImage();        }_onSaveEvent(result) {    //result.enpred - for the base64 enpred png    //result.pathName - for the file path name    console.log(result);  }  } export default Signature;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/608866.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号