ReactNative組件的封裝

ReactNative組件的封裝

官網地址https://facebook.github.io/react-native/docs/native-components-android.html

封裝原生組件的步驟

1.創(chuàng)建一個ViewManager的子類概疆。

2.實現(xiàn)createViewInstance方法稽屏。

3.導出視圖的屬性設置器:使用@ReactProp(或@ReactPropGroup)注解。

4.把這個視圖管理類注冊到應用程序包的createViewManagers里。

5.實現(xiàn)JavaScript模塊。

第一步、創(chuàng)建ViewManager


public class XNButtonManager extends SimpleViewManager<CommonButton> {
    @Override
    public String getName() {
        return "CommonButton"; //1.CommonButton為現(xiàn)有自定義控件,對應RN中注冊組件的名稱;
    }

    @Override
    protected CommonButton createViewInstance(ThemedReactContext reactContext) {
        return new CommonButton(reactContext);//2.需要實現(xiàn)該接口,返回自定義控件的實例對象;
    }

    @ReactProp(name = "type") //設置按鈕類型
    public void setType(CommonButton button, int type) {
        button.setButtonType(type);
        button.invalidate();
    }

    @ReactProp(name = "radius")
    public void setRadius(CommonButton button, float radius) {
        button.setRadius(radius);
        button.invalidate();
    }

    @ReactProp(name = "frameColor")
    public void setFrameColor(CommonButton button, String frameColor) {
        button.setButtonFrameColor(frameColor);
        button.invalidate();
    }

    @ReactProp(name = "fillColor")
    public void setFillColor(CommonButton button, String fillColor) {
        button.setButtonFillColor(fillColor);
        button.invalidate();
    }

    @ReactProp(name = "text")
    public void setText(CommonButton button,String text){
        button.setText(text);
        button.setGravity(Gravity.CENTER);
        button.invalidate();
    }

    @ReactProp(name = "textColor")
    public void setTextColor(CommonButton button,String textColor){
        button.setTextColor(Color.parseColor(textColor));
        button.invalidate();
    }

    @ReactProp(name ="frameWidth")
    public void setFrameWidth(CommonButton button,int frameWidth){
        button.setButtonFrameWidth(frameWidth);
        button.invalidate();
    }
}

第二步计螺、實現(xiàn)createViewManagers接口方法

public class XNReactPackage implements ReactPackage {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Arrays.<ViewManager>asList(
                new XNButtonManager() //在這里添加自定義控件的Manager實例對象;
        );
    }
}

第三步、注冊ReactNative組件

在RN項目根目錄下新建CommonButton.js文件


'use strict'

import PropTypes from 'prop-types';
import { requireNativeComponent, View } from 'react-native';

//定義組件的屬性及類型
var CommonButton = {
    name : "CommonButton",
    propTypes : {
        type : PropTypes.number,
        frameColor: PropTypes.string,
        fillColor : PropTypes.string,
        radius : PropTypes.number,
        text : PropTypes.string,
        frameWidth: PropTypes.number,
        textColor : PropTypes.string,
        ...View.propTypes
    }
}
//導出組件
module.exports = requireNativeComponent("CommonButton",CommonButton);

第四步瞧壮、在RN中使用導出的組件

import CommonButton from '../modlue/CommonButton';
... ...
export default class Welcome extends Component {

    constructor(props) {
        super(props);
    }

    render() {
        return (

            <View style={styles.container}>
                <CommonButton
                    type = { 1 }//1 fill,2: stroke
                    fillColor="#ff0000"
                    frameColor="#ff0000"
                    frameWidth={ 2 }
                    radius={ 15 }
                    text = "自定義按鈕"
                    textColor="#FFFFFF"
                    style = { styles.commonButton }
                />

                <Button
                    style={styles.button}
                    onPress={() => this.transfer()}
                    title="首頁"
                />
            </View>
        );
    }

const styles = StyleSheet.create({
    commonButton : {
        width:150,
        height:50
    }
});

AppRegistry.registerComponent('Welcome', () => Welcome);

image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末登馒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咆槽,更是在濱河造成了極大的恐慌陈轿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秦忿,死亡現(xiàn)場離奇詭異麦射,居然都是意外死亡,警方通過查閱死者的電腦和手機灯谣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門潜秋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胎许,你說我怎么就攤上這事峻呛÷奘郏” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵钩述,是天一觀的道長寨躁。 經常有香客問我,道長牙勘,這世上最難降的妖魔是什么职恳? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮方面,結果婚禮上放钦,老公的妹妹穿的比我還像新娘。我一直安慰自己葡幸,他們只是感情好最筒,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔚叨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辙培。 梳的紋絲不亂的頭發(fā)上蔑水,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音扬蕊,去河邊找鬼搀别。 笑死,一個胖子當著我的面吹牛尾抑,可吹牛的內容都是我干的歇父。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼再愈,長吁一口氣:“原來是場噩夢啊……” “哼榜苫!你這毒婦竟也來了?” 一聲冷哼從身側響起翎冲,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤垂睬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抗悍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驹饺,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年缴渊,在試婚紗的時候發(fā)現(xiàn)自己被綠了赏壹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡衔沼,死狀恐怖蝌借,靈堂內的尸體忽然破棺而出昔瞧,到底是詐尸還是另有隱情,我是刑警寧澤骨望,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布硬爆,位于F島的核電站,受9級特大地震影響擎鸠,放射性物質發(fā)生泄漏缀磕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一劣光、第九天 我趴在偏房一處隱蔽的房頂上張望袜蚕。 院中可真熱鬧,春花似錦绢涡、人聲如沸牲剃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿傅。三九已至,卻和暖如春数苫,著一層夾襖步出監(jiān)牢的瞬間聪舒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工虐急, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留箱残,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓止吁,卻偏偏與公主長得像被辑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敬惦,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫盼理、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 學習ReactNative有一段時間了仁热,也加了好多群榜揖,看見群里每天那么多人在那兒討論和學習ReactNative,...
    光無影閱讀 7,439評論 28 41
  • 監(jiān)督學習中抗蠢,如果預測的變量是離散的举哟,我們稱其為分類(如決策樹,支持向量機等)迅矛,如果預測的變量是連續(xù)的妨猩,我們稱其為回...
    小灰灰besty閱讀 1,407評論 0 5
  • 林千禧漸漸習慣了嘔吐壶硅,每頓吃幾口威兜,然后等惡心的感覺一點一點泛上來,拿上水杯跑去廁所庐椒。一開始是嘔吐椒舵,漱口,結束约谈。笔宿。。...
    何青猊閱讀 102評論 0 0