Android WebView使用的技巧與一些坑
隨著手機(jī)性能的提高,以及iOS和Android兩個(gè)平臺(tái)的普及,更多的App都會(huì)選擇兩個(gè)平臺(tái)的App都進(jìn)行開發(fā),在有些時(shí)候,為了更加快速的開發(fā),我們會(huì)采用hybird方式開發(fā),這個(gè)時(shí)候我們需要使用webview并且自己進(jìn)行一些配置。Android的webview在低版本和高版本采用了不同的webkit版本內(nèi)核,4.4后直接使用了chrome,因此問題很多,這里分享一些我使用過程的一些技巧和遇到的坑。
###webview配置###
mWebview.getSettings().setJavaScriptEnabled(true); //設(shè)置允許運(yùn)行javascript // HTML5 API flags mWebview.getSettings().setAppCacheEnabled(true); //設(shè)置允許緩存 mWebview.getSettings().setDatabaseEnabled(true); //設(shè)置允許使用localstore
上面webview.getSettings()會(huì)獲得WebSettings對(duì)象,在這個(gè)對(duì)象中會(huì)保存Webview的一些設(shè)置,比如上面所設(shè)置的這些,更多的設(shè)置請(qǐng)查看WebSettings的api文檔。
通常我們還會(huì)使用WebViewClient和WebChromeClient這兩個(gè)組件來輔助WebView。WebViewClient主要幫助處理各種通知請(qǐng)求事件等,比如頁(yè)面開始加載,加載完成等。WebChromeClient主要輔助WebView處理javascript對(duì)話框,網(wǎng)站圖標(biāo),網(wǎng)站標(biāo)題,加載進(jìn)度等等。
實(shí)際應(yīng)該根據(jù)實(shí)際情況使用這兩個(gè)組件,重寫響應(yīng)的方法,在其中執(zhí)行自己的一些操作。
###Javascript的使用###
開啟javascript的方法上面已經(jīng)提到了。
客戶端調(diào)用網(wǎng)頁(yè)中的js代碼,或者執(zhí)行相應(yīng)的代碼。
private void evaluateJavascript(String js) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mWebview.evaluateJavascript(js, null); } else { mWebview.loadUrl(js); } }
在android4.4開始系統(tǒng)提供了evaluateJavascript方法來執(zhí)行js方法,并且可以進(jìn)行回調(diào)。但是在低于4.4的版本并沒有這個(gè)方法,我們需要只要直接通過loadUrl的方式來執(zhí)行js,此時(shí)需要在js代碼前加”javascript:”。
另外可以在客戶端定義一些javascript給網(wǎng)頁(yè)中調(diào)用。
比如這樣:
首先定義一個(gè)給js執(zhí)行的類:
public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } } webView.addJavascriptInterface(new WebAppInterface(this), "Android");
之后用*addJavascriptInterface&設(shè)置到webview上,在js中就可以用Android.showToast(“fdf")調(diào)用了。
需要注意的是,在我們給js的接口方法需要是public的,使用到了JavascriptInterface的注解,這個(gè)注解在Android4.2的時(shí)候添加,更新的android如果不加這個(gè)注解是不可以使用的。
###硬件加速###
硬件加速是個(gè)大坑,請(qǐng)勿打開。
在android4.4后使用的chrome,系統(tǒng)會(huì)自行開啟。
###其他###
以及使用WebView,給忘了給應(yīng)用申請(qǐng)網(wǎng)絡(luò)訪問的權(quán)限。
還有一些知識(shí)點(diǎn)沒整理到,請(qǐng)參考webview的文檔,更多的坑以后踩到再更新。
另外JeremyHe總結(jié)的知識(shí)也不錯(cuò),可以參考:http://chabaoo.cn/article/86956.htm
原文地址:http://blog.isming.me/2015/10/18/webview-use/
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中ViewPager組件的基本用法及實(shí)現(xiàn)圖片切換的示例
- android Gallery組件實(shí)現(xiàn)的iPhone圖片滑動(dòng)效果實(shí)例
- Android組件Glide實(shí)現(xiàn)圖片平滑滾動(dòng)效果
- Android自定義組件獲取本地圖片和相機(jī)拍照?qǐng)D片
- Android可循環(huán)顯示圖像的Android Gallery組件用法實(shí)例
- Android高級(jí)組件Gallery畫廊視圖使用方法詳解
- Android高級(jí)組件ImageSwitcher圖像切換器使用方法詳解
- 淺析Android Studio 3.0 升級(jí)各種坑(推薦)
- Android中EditText setText方法的踩坑實(shí)戰(zhàn)
- Android開發(fā)之StackView用法和遇到的坑分析
相關(guān)文章
Android開發(fā)之手勢(shì)檢測(cè)及通過手勢(shì)實(shí)現(xiàn)翻頁(yè)功能的方法
這篇文章主要介紹了Android開發(fā)之手勢(shì)檢測(cè)及通過手勢(shì)實(shí)現(xiàn)翻頁(yè)功能的方法,結(jié)合實(shí)例形式分析了Android GestureDetector類實(shí)現(xiàn)手勢(shì)檢測(cè)功能的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Android編程實(shí)現(xiàn)WebView全屏播放的方法(附源碼)
這篇文章主要介紹了Android編程實(shí)現(xiàn)WebView全屏播放的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)WebView全屏播放的布局與功能相關(guān)技巧,需要的朋友可以參考下2015-11-11Android懸浮對(duì)話框(即點(diǎn)即關(guān)對(duì)話框)實(shí)現(xiàn)代碼
本文給大家介紹android懸浮對(duì)話框和即點(diǎn)即關(guān)閉對(duì)話框,本文介紹非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-03-03android實(shí)現(xiàn)簡(jiǎn)單的乘法計(jì)算代碼
本文完成輸入2個(gè)數(shù)相乘,并顯示其結(jié)果。共涉及到4個(gè)控件的使用學(xué)習(xí),輸入數(shù)字采用EditText,顯示結(jié)果用TextView,運(yùn)算按鈕button以及菜單中的退出鍵2013-11-11Android編程實(shí)現(xiàn)的手寫板和涂鴉功能
這篇文章主要介紹了Android編程實(shí)現(xiàn)的手寫板和涂鴉功能,涉及Android界面布局及圖形繪制功能相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01解決Android橫豎屏切換數(shù)據(jù)丟失問題的方法
這篇文章主要為大家詳細(xì)介紹了Android橫豎屏切換數(shù)據(jù)丟失問題的解決方法,感興趣的小伙伴們可以參考一下2016-05-05Android中實(shí)現(xiàn)密碼的隱藏和顯示的示例
本篇文章主要介紹了Android中實(shí)現(xiàn)密碼的隱藏和顯示的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-09