react native 原生UI組件

原生UI組件的封裝方法與封裝原生模塊十分類似档桃。

我們以 WebView 為例進(jìn)行封裝。

需要繼承 SimpleViewManager 這個(gè)泛型類份名,和原生模塊類似驳阎,需要重寫getName()方法,將UI組件名稱暴露給JavaScript層郑藏,接著需要重寫createViewInstance方法,在里面返回我們需要使用的原生UI組件的實(shí)例瘩欺,這里就是WebView必盖。然后就是暴露一些必要屬性給javascript層,為了簡(jiǎn)單起見俱饿,我們這里只暴露兩個(gè)屬性歌粥,一個(gè)是url,一個(gè)是html拍埠,一旦javascript層設(shè)置了url失驶,就會(huì)加載一個(gè)網(wǎng)頁,而一旦設(shè)置了html枣购,則會(huì)去加載這段html嬉探,而屬性的暴露是使用注解擦耀,將注解設(shè)置在對(duì)應(yīng)的set方法上,之后再set方法中處理UI的更新涩堤,比如一旦設(shè)置了url眷蜓,在setUrl里面就要加載網(wǎng)頁。最終我們的ViewManager就是這樣子的胎围。

package com.reactnativeproject;

import android.support.annotation.Nullable;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;

/**
 * Created by createdit on 17/2/10.
 */
public class ReactWebViewManager extends SimpleViewManager<WebView> {

    public static final String REACT_CLASS = "RCTWebView";

    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @Override
    protected WebView createViewInstance(ThemedReactContext reactContext) {
        WebView webView = new WebView(reactContext);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){
                view.loadUrl(url);
                return true;
            }
        });

        return webView;
    }

    @ReactProp(name="url")
    public void setUrl(WebView view, @Nullable String url){
        Log.e("TAG","setUrl");
        view.loadUrl(url);
    }

    @ReactProp(name="html")
    public void setHtml(WebView view, @Nullable String html) {
        Log.e("TAG","setHtml");
        view.loadData(html, "text/html; charset=utf-8,", "UTF-8");
    }
}

和原生模塊一樣吁系,原生UI組件也需要進(jìn)行注冊(cè),實(shí)現(xiàn)ReactPackage接口白魂,進(jìn)行WebView的注冊(cè)汽纤。

package com.reactnativeproject;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * Created by createdit on 17/2/10.
 */
public class AppReactPackage implements ReactPackage {

    @Override
    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Arrays.<ViewManager>asList(
                new ReactWebViewManager()
        );
    }

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市福荸,隨后出現(xiàn)的幾起案子冒版,更是在濱河造成了極大的恐慌,老刑警劉巖逞姿,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辞嗡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滞造,警方通過查閱死者的電腦和手機(jī)续室,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谒养,“玉大人挺狰,你說我怎么就攤上這事÷蚩撸” “怎么了丰泊?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)始绍。 經(jīng)常有香客問我瞳购,道長(zhǎng),這世上最難降的妖魔是什么亏推? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任学赛,我火速辦了婚禮,結(jié)果婚禮上吞杭,老公的妹妹穿的比我還像新娘盏浇。我一直安慰自己,他們只是感情好芽狗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布绢掰。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滴劲。 梳的紋絲不亂的頭發(fā)上攻晒,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音哑芹,去河邊找鬼炎辨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聪姿,可吹牛的內(nèi)容都是我干的碴萧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼末购,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼破喻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盟榴,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤曹质,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后擎场,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羽德,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年迅办,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宅静。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡站欺,死狀恐怖姨夹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矾策,我是刑警寧澤磷账,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站贾虽,受9級(jí)特大地震影響逃糟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榄鉴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一履磨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庆尘,春花似錦、人聲如沸巷送。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至付魔,卻和暖如春聊品,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背几苍。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工翻屈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妻坝。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓伸眶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刽宪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厘贼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前面兩篇文章主要介紹了如何在ReactNative中集成并使用原生模塊的代碼,本篇文章會(huì)講解另一個(gè)和原生模塊有關(guān)的...
    zhuhf閱讀 4,590評(píng)論 3 11
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評(píng)論 25 707
  • 上一篇文章[React Native]原生UI組件(上)我們介紹了如何在ReactNative中使用原生UI組件圣拄,...
    zhuhf閱讀 4,056評(píng)論 12 4
  • 問花不語嘴秸,花替人愁。 我是紫州一人之下萬人之上的漫天公主庇谆,我的名喚紫漫天岳掐,我的國(guó)家是紫州最龐大的紫衿國(guó)》苟可是縱使我...
    未慈閱讀 1,848評(píng)論 3 18
  • 女兒是父母的貼心小棉襖哥攘,以至于我家重女輕男剖煌,從來都是弟弟去干活,我和妹妹休息中逝淹。今天看到果汁的留言耕姊,不自覺心都化了...
    臻靜閱讀 343評(píng)論 0 3