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

上文中提到原生模块的使用,现在来简单介绍一下原生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,否则不能显示出来


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值