當(dāng)看到這個標(biāo)題的時候,很多人都覺得很熟悉啊,,現(xiàn)在市場上面大多數(shù)的 App 都使用到了這個,,使用原生 Native 嵌套 Html5,而這種模式的出現(xiàn),,也出現(xiàn)了一個新的詞叫做 Hybrid App ,,也就是混合 App,這篇的文章主要就是來分享下 Hybrid App 的相關(guān)知識以及下如何實(shí)現(xiàn) Native 和 Html5 的交互,。 App 的三種主要類別目前主流 App 應(yīng)用程序主要分為三類,,分別為 Web App、Native App 和 Hybrid App,,也就是網(wǎng)頁 App,、原生 App 和混合 App。其中網(wǎng)頁 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īng)用,。 1.1 Web App 的優(yōu)點(diǎn)(1)輕應(yīng)用,借助于瀏覽器,,不需要太高的成本,,所以開發(fā)成本相對較低。 1.2 Web App 的缺點(diǎn)(1)網(wǎng)頁的加載,,只是臨時性的入口。 2. Native App 的詳細(xì)介紹Native App 指的是原生程序,一般依托于操作系統(tǒng),,有很強(qiáng)的交互,,是一個完整的 App,可拓展性強(qiáng),,但是需要用戶下載安裝使用,。 2.1 Native App 的優(yōu)點(diǎn)(1)打造完美的用戶體驗。 2.2 Native App 的缺點(diǎn)(1)開發(fā)成本高(不同平臺有不同的開發(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 的體驗,。 3.2 Hybrid App 的缺點(diǎn)(1)受制于技術(shù)、網(wǎng)速等條件,,跨平臺要求較高。 4. 三種類別的對比上面詳細(xì)介紹了三種類別的概念和優(yōu)缺點(diǎn),對于這三種類型的 App 也有了一定的認(rèn)識了,,最后總結(jié)下這三種類型,看圖說話,。 對比圖 上圖中對于 Web App ,、Native App 和 Hybrid App 的主要特性,、平臺使用以及網(wǎng)絡(luò)要求做了詳細(xì)的對比。 實(shí)現(xiàn) Native 和 Html5 的交互說到交互的話,,就可以簡單的分為兩種了,,分別為 Android 調(diào)用 HTML 和 HTML 調(diào)用 Android,下面是詳細(xì)的交互步驟,。 1. 添加 WebView在布局文件中添加 WebView 用來加載 Web 頁面的展示,。
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 頁面中添加一個輸入框 input 和 按鈕 button 控件,,并且設(shè)置樣式,這里就不多講了,,主要的是要講如何實(shí)現(xiàn)交互,。 首先在 Activity 中 new 一個 JavascriptInterface,命名為 WebAppInterface,,也就是 JS 的腳本接口,,用來交互使用,然后在 WebAppInterface 中添加方法 sayHello(String name); @JavascriptInterface public void sayHello(String name) { Toast.makeText(context, 'name=' + name, Toast.LENGTH_LONG).show(); } 方法上面的注解 @JavascriptInterface 必不可少,,否則會報錯的,,在 Activity 中寫好方法后,就要在 Html5 頁面中添加調(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 中寫入對 function 的調(diào)用,,不過既然需要調(diào)用,那就為原生界面 XML 布局添加一個按鈕,,給這個按鈕綁定點(diǎn)擊事件來調(diào)用 JS 腳本,。
按鈕加好了,之后就是綁定點(diǎn)擊事件,。 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //點(diǎn)擊事件 } }); 對于 JS 腳本的調(diào)用放在按鈕 button 的點(diǎn)擊事件中,。 runOnUiThread(new Runnable() { @Override public void run() { webView.loadUrl('javascript:showName('' 菜鳥窩 '')'); } }); 調(diào)用 JS 腳本 function,將 '菜鳥窩' 字符串傳入到 Html5 的頁面輸入框 input 中,。 最終效果圖Native 和 Html5 的簡單交互代碼都已經(jīng)寫好了,,最后運(yùn)行獲取效果圖。 |
|