1.什麼是WebView?
答:Android內置webkit內核的高性能瀏覽器,而WebView則是在這個基礎上進行封裝後的一個 控件,WebView直譯網頁視圖,我們可以簡單的看作一個可以嵌套到界面上的一個瀏覽器控件!
2.相關方法
先上官方文檔:WebView 並不打算一個個地去講屬性,用到哪個寫哪個,其他的自行查閱文檔! 除了直接WebView外我們還可以添加你自己的行爲,可以自行定製下述類:
WebChromeClient:輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等! 比如下面這些:
方法 | 作用 |
---|---|
onJsAlert(WebView view,String url,String message,JsResult result) | 處理Js中的Alert對話框 |
onJsConfirm(WebView view,String url,String message,JsResult result) | 處理Js中的Confirm對話框 |
onJsPrompt(WebView view,String url,String message,String defaultValue,JsPromptResult result) | 處理Js中的Prompt對話框 |
onProgressChanged(WebView view,int newProgress) | 當加載進度條發生改變時調用 |
onReceivedIcon(WebView view, Bitmap icon) | 獲得網頁的icon |
onReceivedTitle(WebView view, String title) | 獲得網頁的標題 |
WebViewClient:輔助WebView處理各種通知與請求事件! 比如下面這些方法:
方法 | 作用 |
---|---|
onPageStared(WebView view,String url) | 通知主程序網頁開始加載 |
onPageFinished(WebView view,String url,Bitmap favicon) | 通知主程序,網頁加載完畢 |
doUpdateVisitedHistory(WebView view,String url,boolean isReload) | 更新歷史記錄 |
onLoadResource(WebView view,String url) | 通知主程序WebView即將加載指定url的資源 |
onScaleChanged(WebView view,float oldScale,float newScale) | ViewView的縮放發生改變時調用 |
shouldOverrideKeyEvent(WebView view,KeyEvent event) | 控制webView是否處理按鍵時間,如果返回true,則WebView不處理,返回false則處理 |
shouldOverrideUrlLoading(WebView view,String url) | 控制對新加載的Url的處理,返回true,說明主程序處理WebView不做處理,返回false意味着WebView會對其進行處理 |
onReceivedError(WebView view,int errorCode,String description,String failingUrl) | 遇到不可恢復的錯誤信息時調用 |
WebSettings:WebView相關配置的設置,比如setJavaScriptEnabled()設置是否允許JS腳本執行 部分方法如下:
方法 | 作用 |
---|---|
getSettings() | 返回一個WebSettings對象,用來控制WebView的屬性設置 |
loadUrl(String url) | 加載指定的Url |
loadData(String data,String mimeType,String encoding) | 加載指定的Data到WebView中.使用"data:"作爲標記頭,該方法不能加載網絡數據.其中mimeType爲數據類型如:textml,image/jpeg. encoding爲字符的編碼方式 |
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) | 比上面的loadData更加強大 |
setWebViewClient(WebViewClient client) | 爲WebView指定一個WebViewClient對象.WebViewClient可以輔助WebView處理各種通知,請求等事件。 |
setWebChromeClient(WebChromeClient client) | 爲WebView指定一個WebChromeClient對象,WebChromeClient專門用來輔助WebView處理js的對話框,網站title,網站圖標,加載進度條等 |
這裏重要區分三個load方法的區別:
loadUrl():直接顯示網頁內容(單獨顯示網絡圖片),一般不會出現亂碼。 loadData(data, "text/html", "UTF-8"):用來加載URI格式的數據,不能通過網絡來加載內容, 不能加載圖片,而且經常會遇到亂碼的問題,我們知道String類型的數據主要是Unicode編碼的, 而WebView一般爲了節省資源使用的是UTF-8編碼,儘管我們按上面寫了,但是還需要爲webView設置: webview.getSettings().setDefaultTextEncodingName("UTF -8"); loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null):loadData類的一個 增強類,可以加載圖片,baseUrl爲你存儲的圖片路徑,而且只需在這裏設置utf-8就可以解決亂碼 問題了!