RN自定义原生控件(一)

2019-03-26  本文已影响0人  幻影形風

1 . android端原生控件管理器创建
public class CrazyButtonManager extends SimpleViewManager<Button> {
public static final String REACT_CLASS = "CrazyButton"; //抛给js层认的标签名
@Override
public String getName() {
return REACT_CLASS;
}

@ReactProp(name = "title") //定义给js层赋值的prop属性
public void setTitle(Button btn,String text) {
    btn.setText(text);
}

//创建button的实例
@Override
protected Button createViewInstance(ThemedReactContext reactContext) {
Button btn = new Button(reactContext);
btn.setText("hello i'm a button!!!");
return btn;
}

//创建视图管理器
public List<ViewManager> createViewManagers(
ReactApplicationContext reactContext) {
return Arrays.<ViewManager>asList(
new CrazyButtonManager()
);
}
}

  1. 引入到package
    public class MyFeaturePackage implements ReactPackage {
    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    List<ViewManager> views = new ArrayList<>();
    views.add(new CrazyButtonManager());
    return views;
    }
    }

  2. package注册
    public class MainApplication extends Application implements ReactApplication {
    @Override
    protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
    new MyFeaturePackage(),//将package注册到此位置
    new MainReactPackage(),
    new RNGestureHandlerPackage()
    );
    }

  3. js层组件注册
    // CrazyButton.js
    //为了方便引用,安置在单独文件中使用
    import PropTypes from 'prop-types'
    import { requireNativeComponent, View } from 'react-native';

var iface = {
name: 'CrazyButton',
propTypes: {
title: PropTypes.string,
...View.propTypes
}
}
module.exports = requireNativeComponent('CrazyButton',iface);

  1. js层组件调用
    import CrazyButton from './components/CrazyButton'
    <CrazyButton title="abc" style={{
    backgroundColor: '#eeeeee',
    width: 100,
    height: 100
    }}>
    </CrazyButton>
上一篇下一篇

猜你喜欢

热点阅读