React Native 原生UI组件的基本使用

来源:互联网 发布:java nanotime 唯一 编辑:程序博客网 时间:2024/06/05 02:25

上文中提到原生模块的使用,现在来简单介绍一下原生UI组件的使用:

1. 首先定义你要显示的原生view:

package com.demo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.view.View;public class CircleView extends View {    private Paint mPaint;    public CircleView(Context context) {        super(context);        mPaint = new Paint();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawCircle(50,50,50,mPaint);    }}

2.创建一个ViewManger的子类

package com.demo;import com.facebook.react.uimanager.SimpleViewManager;import com.facebook.react.uimanager.ThemedReactContext;/** * CircleView 是一个自定义的原生视图 */public class DrawerCircle extends SimpleViewManager<CircleView> {    //返回的名字会在JavaScript中引用这个原生视图类型    @Override    public String getName() {        return "MyDrawerView";    }    //视图在createViewInstance中创建,且应当初始化设为默认的状态。    //所有属性的设置都通过后续的updateView来进行    @Override    protected CircleView createViewInstance(ThemedReactContext reactContext) {        return new CircleView(reactContext);    }}

3.通过@ReactProp注解来导出属性的设置方法(下面这个方法在DrawerCircle类中)

//使用注解来导出圆的半径,便于使用的地方修改    @ReactProp(name="radius")    public void setRadius(CircleView circleView, int radius) {        circleView.setmRadius(radius);    }
4.注册ViewManager:把视图控制器注册到应用中,和原生模块注册方法类似,唯一区别是我们需要写在createViewManagers方法中:

package com.demo;import com.facebook.react.ReactPackage;import com.facebook.react.bridge.NativeModule;import com.facebook.react.bridge.ReactApplicationContext;import com.facebook.react.uimanager.ViewManager;import java.util.ArrayList;import java.util.List;public class MyReactPackage implements ReactPackage {    //把我们要导出的模块放在modules中    @Override    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {        List<NativeModule> modules = new ArrayList<>();        modules.add(new MyNativeModules(reactContext));        return modules;    }    //把我们要导出的UI放在modules中    @Override    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {        List<ViewManager> modules = new ArrayList<>();        modules.add(new DrawerCircle());        return modules;    }}

5.在JS中进行调用:

 var iface = {      name:'MyDrawerView',      propTypes:{        radius:PropTypes.number,        ...View.propTypes      }    }    const MyCirle = requireNativeComponent('MyDrawerView', iface);

 <MyCirle radius={30} style={{width:100, height:100}}/>

注意我们需要制定MyCircle的width和height,否则不能显示出来


原创粉丝点击