商城項(xiàng)目實(shí)戰(zhàn) | 18.1 Native 與 HTML5 交互

本文為菜鳥窩作者劉婷的連載爱沟。菜
菜鳥窩-程序員的黃埔軍校

當(dāng)看到這個(gè)標(biāo)題的時(shí)候帅霜,很多人都覺得很熟悉啊,現(xiàn)在市場(chǎng)上面大多數(shù)的 App 都使用到了這個(gè)呼伸,使用原生 Native 嵌套 Html5身冀,而這種模式的出現(xiàn),也出現(xiàn)了一個(gè)新的詞叫做 Hybrid App 括享,也就是混合 App搂根,這篇的文章主要就是來分享下 Hybrid App 的相關(guān)知識(shí)以及下如何實(shí)現(xiàn) Native 和 Html5 的交互。

App 的三種主要類別

目前主流 App 應(yīng)用程序主要分為三類铃辖,分別為 Web App剩愧、Native App 和 Hybrid App,也就是網(wǎng)頁(yè) App娇斩、原生 App 和混合 App仁卷。其中網(wǎng)頁(yè) App 主要是借助于瀏覽器就可以直接運(yùn)行使用,原生 App 是原生的應(yīng)用程序犬第,混合 App 就是前面兩者的結(jié)合體锦积。

1. Web App 的詳細(xì)介紹

Web App 指采用 Html5 語言寫出的 App,不需要下載安裝歉嗓。類似于現(xiàn)在所說的輕應(yīng)用丰介。生存在瀏覽器中的應(yīng)用,基本上可以說是觸屏版的網(wǎng)頁(yè)應(yīng)用。

1.1 Web App 的優(yōu)點(diǎn)

(1)輕應(yīng)用基矮,借助于瀏覽器淆储,不需要太高的成本,所以開發(fā)成本相對(duì)較低家浇。
(2)直接可以在后臺(tái)服務(wù)器上面更新本砰,更新方便而且快。
(3)更新無需通知用戶钢悲,不需要手動(dòng)升級(jí)点额。
(4)在 IOS 、Android 和 Windows 等平臺(tái)和終端都可以使用莺琳,能夠跨多個(gè)平臺(tái)和終端还棱。

1.2 Web App 的缺點(diǎn)

(1)網(wǎng)頁(yè)的加載,只是臨時(shí)性的入口惭等。
(2)無法獲取系統(tǒng)級(jí)別的通知珍手,提醒,動(dòng)效等等辞做,缺少原生的一些功能琳要。
(3)用戶留存率低。
(4)設(shè)計(jì)受限制諸多秤茅。
(5)受制于網(wǎng)速等稚补,體驗(yàn)較差。

2. Native App 的詳細(xì)介紹

Native App 指的是原生程序框喳,一般依托于操作系統(tǒng)课幕,有很強(qiáng)的交互,是一個(gè)完整的 App五垮,可拓展性強(qiáng)乍惊,但是需要用戶下載安裝使用。

2.1 Native App 的優(yōu)點(diǎn)

(1)打造完美的用戶體驗(yàn)放仗。
(2)原生的應(yīng)用程序污桦,性能穩(wěn)定。
(3)操作速度快匙监,上手流暢凡橱。
(4)訪問本地資源(通訊錄,相冊(cè))方便亭姥。
(5)設(shè)計(jì)出色的動(dòng)效稼钩,轉(zhuǎn)場(chǎng)。
(6)擁有系統(tǒng)級(jí)別的貼心通知或提醒达罗。
(7)用戶留存率高坝撑。

2.2 Native App 的缺點(diǎn)

(1)開發(fā)成本高(不同平臺(tái)有不同的開發(fā)語言和界面適配)静秆。
(2)維護(hù)成本高(例如一款A(yù)pp已更新至V5版本,但仍有用戶在使用 V2巡李, V3抚笔, V4 版本,需要更多的開發(fā)人員維護(hù)之前的版本)侨拦。
(3)更新緩慢殊橙,根據(jù)不同平臺(tái),提交–審核–上線 等等不同的流程狱从,需要經(jīng)過的流程較復(fù)雜膨蛮。

3. Hybrid App 的詳細(xì)介紹

Hybrid App 指的是半原生半Web的混合類 App,需要下載安裝季研,看上去類似 Native App敞葛,但只有很少的 UI Web View,訪問的內(nèi)容是 Web与涡,比如淘寶惹谐、京東等 App 都是這種類型的。

3.1 Hybrid App 的優(yōu)點(diǎn)

(1)極力去打造類似于 Native App 的體驗(yàn)驼卖。
(2)可以簡(jiǎn)單更新 APP 內(nèi)部的局部?jī)?nèi)容氨肌,擁有 Web App 的優(yōu)勢(shì)。
(3)結(jié)合了 Native App 和 Web App 的優(yōu)點(diǎn)款慨,性能也相對(duì)穩(wěn)定。

3.2 Hybrid App 的缺點(diǎn)

(1)受制于技術(shù)谬莹、網(wǎng)速等條件檩奠,跨平臺(tái)要求較高。
(2)原生和網(wǎng)頁(yè)的融合向不完善附帽,技術(shù)不是很成熟埠戳,還在不斷更新中。
(3)還是需要較高的開發(fā)和維護(hù)成本蕉扮。

4. 三種類別的對(duì)比

上面詳細(xì)介紹了三種類別的概念和優(yōu)缺點(diǎn)整胃,對(duì)于這三種類型的 App 也有了一定的認(rèn)識(shí)了,最后總結(jié)下這三種類型喳钟,看圖說話屁使。

對(duì)比圖
對(duì)比圖

上圖中對(duì)于 Web App 、Native App 和 Hybrid App 的主要特性奔则、平臺(tái)使用以及網(wǎng)絡(luò)要求做了詳細(xì)的對(duì)比蛮寂。

實(shí)現(xiàn) Native 和 Html5 的交互

說到交互的話,就可以簡(jiǎn)單的分為兩種了易茬,分別為 Android 調(diào)用 HTML 和 HTML 調(diào)用 Android酬蹋,下面是詳細(xì)的交互步驟及老。

1. 添加 WebView

在布局文件中添加 WebView 用來加載 Web 頁(yè)面的展示。

<WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>

WebView 是 Android 原生中的控件之一范抓,直接在 xml 布局文件中添加即可骄恶。

2. 設(shè)置 WebView 支持 JS 腳本

如果需要 WebView 實(shí)現(xiàn)和原生的交互,那么就要讓 WebView 支持執(zhí)行 JS 的腳本匕垫。

webView.getSettings().setJavaScriptEnabled(true);

在 Html5 中的功能操作都是使用 JS 來實(shí)現(xiàn)的僧鲁,WebView 默認(rèn)是不支持 JS 腳本,所以這里必須要先設(shè)置支持執(zhí)行 JS 的腳本年缎。

3. 實(shí)現(xiàn) JS 調(diào)用 Android

在新建的 HTML5 頁(yè)面中添加一個(gè)輸入框 input 和 按鈕 button 控件悔捶,并且設(shè)置樣式,這里就不多講了单芜,主要的是要講如何實(shí)現(xiàn)交互蜕该。

首先在 Activity 中 new 一個(gè) JavascriptInterface,命名為 WebAppInterface洲鸠,也就是 JS 的腳本接口堂淡,用來交互使用,然后在 WebAppInterface 中添加方法 sayHello(String name);

       @JavascriptInterface
        public void sayHello(String name) {

            Toast.makeText(context, "name=" + name, Toast.LENGTH_LONG).show();

        }

方法上面的注解 @JavascriptInterface 必不可少扒腕,否則會(huì)報(bào)錯(cuò)的绢淀,在 Activity 中寫好方法后,就要在 Html5 頁(yè)面中添加調(diào)用 sayHello(String name) 的 function 方法瘾腰。

function sayhello(){


           var name = document.getElementById("txtName").value;

           window.app.sayHello(name);//傳參數(shù)給APP

}

獲取到輸入框 input 的內(nèi)容皆的,然后調(diào)用 Android 中的 sayHello(String name) 方法,將內(nèi)容使用 Toast 彈出來蹋盆。

4. 實(shí)現(xiàn) Android 調(diào)用 JS

實(shí)現(xiàn) Android 調(diào)用 JS 和實(shí)現(xiàn) JS 調(diào)用 Android 正好是反過來的费薄,Android 調(diào)用 JS 是要實(shí)現(xiàn)在原生的界面中調(diào)用 Html5 中的 function 方法,就先寫好 function栖雾。

function showName(name){

      document.getElementById("txtName").value=name;

}

這里的 function 是用于給輸入框 input 設(shè)置 value 值楞抡。

然后在 Activity 中寫入對(duì) function 的調(diào)用,不過既然需要調(diào)用析藕,那就為原生界面 XML 布局添加一個(gè)按鈕召廷,給這個(gè)按鈕綁定點(diǎn)擊事件來調(diào)用 JS 腳本。

<Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="調(diào)用JS"/>

按鈕加好了账胧,之后就是綁定點(diǎn)擊事件竞慢。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                   //點(diǎn)擊事件
            }
        });

對(duì)于 JS 腳本的調(diào)用放在按鈕 button 的點(diǎn)擊事件中。

runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    webView.loadUrl("javascript:showName('" 菜鳥窩 "')");
                }
            });

調(diào)用 JS 腳本 function治泥,將 "菜鳥窩" 字符串傳入到 Html5 的頁(yè)面輸入框 input 中梗顺。

最終效果圖

Native 和 Html5 的簡(jiǎn)單交互代碼都已經(jīng)寫好了,最后運(yùn)行獲取效果圖车摄。

效果圖
效果圖

點(diǎn)擊“調(diào)用 JS”按鈕寺谤,給 Html5 頁(yè)面的輸入框 input 賦予了 value 值——“菜鳥窩”仑鸥,然后點(diǎn)擊 Html5 頁(yè)面的 “say Hello” 按鈕來 Toast 出輸入框 input 的 value 值。

注冊(cè)有禮.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末变屁,一起剝皮案震驚了整個(gè)濱河市眼俊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粟关,老刑警劉巖疮胖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闷板,居然都是意外死亡澎灸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門遮晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來性昭,“玉大人,你說我怎么就攤上這事县遣∶拥撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵萧求,是天一觀的道長(zhǎng)其兴。 經(jīng)常有香客問我,道長(zhǎng)夸政,這世上最難降的妖魔是什么元旬? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮守问,結(jié)果婚禮上匀归,老公的妹妹穿的比我還像新娘。我一直安慰自己酪碘,他們只是感情好朋譬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布盐茎。 她就那樣靜靜地躺著兴垦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪字柠。 梳的紋絲不亂的頭發(fā)上探越,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音窑业,去河邊找鬼钦幔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛常柄,可吹牛的內(nèi)容都是我干的鲤氢。 我是一名探鬼主播搀擂,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼卷玉!你這毒婦竟也來了哨颂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤相种,失蹤者是張志新(化名)和其女友劉穎威恼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寝并,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箫措,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衬潦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斤蔓。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖别渔,靈堂內(nèi)的尸體忽然破棺而出附迷,到底是詐尸還是另有隱情,我是刑警寧澤哎媚,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布喇伯,位于F島的核電站,受9級(jí)特大地震影響拨与,放射性物質(zhì)發(fā)生泄漏稻据。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一买喧、第九天 我趴在偏房一處隱蔽的房頂上張望捻悯。 院中可真熱鬧,春花似錦淤毛、人聲如沸今缚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姓言。三九已至,卻和暖如春蔗蹋,著一層夾襖步出監(jiān)牢的瞬間何荚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工猪杭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留餐塘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓皂吮,卻偏偏與公主長(zhǎng)得像戒傻,于是被迫代替她去往敵國(guó)和親税手。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,117評(píng)論 25 707
  • 文/小昭11 看完《人生在于心安》需纳,這本星云大師的著作之后受益匪淺冈止,對(duì)于生命有了更加深刻的理解和思考,在這里與大...
    小昭11閱讀 1,824評(píng)論 9 4
  • 語言是人類最重要的交際工具候齿,是人們進(jìn)行溝通的主要表達(dá)方式熙暴。人們借助語言保存和傳遞人類文明的成果。所以語言的...
    可絲閱讀 396評(píng)論 2 8
  • 這是
    蟈蟈_3fe3閱讀 125評(píng)論 0 0
  • 氛圍的營(yíng)造也很重要慌盯。 寥寥幾筆周霉,簡(jiǎn)筆畫不是為了追求逼真,而是要用簡(jiǎn)單的線條勾勒出物體最明顯的特征亚皂。 人人都能看懂簡(jiǎn)...
    范季康閱讀 220評(píng)論 0 0