Android學習11

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就可以解決亂碼 問題了!

發佈了114 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章