1. 程式人生 > >Android WebView 的基本使用

Android WebView 的基本使用

1.介紹webView

WebView是Android中提供用來瀏覽網頁的控制元件,WebView的引擎是webKit,只是在高低版本使用的不同核心的webKit,在Android4.4後直接使用了Chrome。

2.作用

1.用來展示網頁
2.可以直接是本地的(或者遠端的)html來佈局

3.簡單的使用

一.webview是一個元件,建立方法有兩種
1.直接在xml中佈局
2.直接new一個WebView新增到佈局中


二.webView的狀態
webview有正常瀏覽網頁狀態、暫停狀態、銷燬狀態
1.webview.onResume();
//正常瀏覽網頁狀態
2.webview.onPause();
//暫停狀態 會停止所有的動作,DOM的解析,外掛的執行,JavaScript的執行
webview.pauseTimers(); //停止所有webView的layout, 怕熱sing, JavaScripttimer,降低CPU功耗 webview.resumeTimer(); //恢復pauserTimer狀態 三.配置webview 配置webview可以使用webSettings這個子類來完成 //獲取WebSettings物件 WebSettings settings = webview.getSettings(); //是否支援JavaScript的互動 settings.setJavaSciptEnabled(true); //設定自適應螢幕,兩者合用 settings.setUseWideViewPort(true
); //將圖片調整合適webview的大小 settings.setLoadWithOverviewMode(true); //縮放至螢幕的大小 //縮放操作 settings.setSupportZoom(true); //支援縮放, settings.setBuiltInZoomControls(true); //設定內建縮放控制元件 settings.setDisplayZoomControls(false); //隱藏原生的縮放控制元件 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //關閉webview中快取 settings.setAllowFileAccess(true
); //設定可以訪問檔案 settings.setJavaScriptCanOpenWindowsAutomtically(true); //支援通過JS開啟新視窗 settings.setLoadsImagesAutomatically(true); //支援自動載入圖片 settings.setDefaultTextEncodingName("utf-8"); //設定預設編碼格式 setCacheMode有四種載入模式 1.WebSettings.LOAD_CACHE_ONLY: 不使用網路,只讀取本地快取資料 2.WebSettings.LOAD_DEFAULT: (預設)根據cache-control決定是否從網路上取資料 3.WebSettings.LOAD_NO_CACHE: 不使用快取,只從網路獲取資料 4.WebSettings.LOAD_CACHE_ELSE_NETWORK: 只要本地有,無論是否過期,獲取no-cache,都使用快取中的資料。 WebView在載入資料時,會在data/data/包名目錄下生成database和cache兩個資料夾。URL記錄儲存在WebViewCache.db中,URL中的內容儲存在WebViewCache資料夾下 結合離線載入 if(判斷網路){ //網路可用時,從網路上載入 settings.setCacheMode(WebSettings.LOAD_DEFAULT); } else{ //網路不可用時,從本地載入資料 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } //一些其他設定 settings.setDomStorageEnabled(); //開啟DOM storage API功能 settings.setDatabaseEnabled(); //開啟database storage API功能 settings.setAppCacheEnabled(); //開啟 Application Caches功能 settings.setAppCachePath(""); //設定Application caches的快取目錄 每一個Application 只調用一次setAppCachePath(),setAppCacheMaxSize(); 四.處理通知和請求事件 webview.setWebViewClient(new WebViewClient(){ /* * shouldOverrideUrlLoading * 作用:開啟網頁時不呼叫系統瀏覽器,而是在本WebView中顯示;在網頁上的所有載入都經過這個 * 方法,這個函式我們可以做很多操作 * */ //在API21及以下,使用該方法 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //使用webview進行載入 view.loadUrl(url); //已處理,返回true return true; } //在API21以上,使用該方法 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return super.shouldOverrideUrlLoading(view, request); } //作用: 開始載入頁面呼叫的,我們可以設定一個loading的頁面,告訴使用者程式在等待網路響應。 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //設定記載開始的操作 } //作用:在頁面載入結束時呼叫。我們課可以關閉loading條,切換程式動作 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //設定載入結束的操作 } //作用:在載入頁面資源是會呼叫,每一個資源(比如圖片)的載入都會呼叫一次 @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); //設定載入資源的操作 } //作用: 載入頁面的伺服器出現錯誤時(如404)呼叫。 /* * App裡面使用webview控制元件的時候遇到了諸如404這類的錯誤的時候,若是顯示瀏覽器裡面的那種錯誤 * 提示頁面就顯得很醜陋了,那麼這個時候我們的app就需要架子啊一個本地的錯誤提示頁面,即webview * 如何載入一個本地的頁面 * */ //在API23以下使用該方法 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //步驟1:寫一個html檔案(error_handle.html),用於出錯時顯示個使用者看的提示頁面 //步驟2:將該html檔案放置到程式碼根目錄的assets資料夾下 //步驟3:複寫WebViewClient的onReceivedError方法 //該方法傳回了錯誤碼,根據錯誤型別可以進行不同的錯誤分類處理 /* switch (errorCode){ case HttpStatus.SC_NOT_FOUND: view.loadUrl("file:///android_assets/error_handle.html"); break; }*/ } //在API23以上,使用該方法 @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); } //作用:處理https請求 //webView預設是不處理https請求的,頁面顯示空白,需要進行如下設定: @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error); handler.proceed(); //表示等待證書響應 //handler.cancel(); //表示掛起連線,為預設方式 //handler.handleMessage(null); //可做其他處理 } }); 五.輔助WebView處理JavaScript的對話方塊,網址圖示,網站標題等等 //設定WebChromeClient mWebView.setWebChromeClient(new WebChromeClient(){ //作用:獲得網頁的載入進度並顯示 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } /*作用:獲取Web頁中的標題 * 每個網頁的頁面都有一個標題,比如www.baidu.com這個頁面的標題即"百度一下,你就知道" * 那麼如何知道當前WebView正在載入的頁面的title並進行設定呢*/ @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); mToolbar.setTitle(title); } // 由於設定了彈窗檢驗呼叫結果,所以需要支援js對話方塊 // webview只是載體,內容的渲染需要使用webviewChromClient類去實現 // 通過設定WebChromeClient物件處理JavaScript的對話方塊 //設定響應js 的Alert()函式 @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { return super.onJsAlert(view, url, message, result); } }); 六.webview載入網頁的幾種方法 loadUrl(String url); //可以是網路地址,也可以是本地地址 loadUrl(String url, Map<String, String> additionalHttpHeaders);//可以是網路地址,也可以是本地地址, 新增頭部 loadData(String data, String mimeType, String encoding); //data 是string資料, 格式, 編碼格式 loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl); //base的url地址, data資料, 格式, 編碼格式, 歷史記錄url 七.銷燬webView 在銷燬webView時, 先將webview載入為null內容, 可以在此清理歷史記錄,然後移除webView,在銷燬webview,最後在將webview置為null webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); //載入null資料 webview.clearHistory(); //清除歷史記錄 webview.getParent().remove(webview); //移除webview webview.destroy(); //銷燬webview webview = null; //將webview置為null

4.防止記憶體洩漏

.新建webview時
在使用webView元件時,最好不要將webview寫在xml中,而是直接new一個webview
context使用getApplicationContext();
二.銷燬時
在銷燬webView時, 先將webview載入為null內容, 可以在此清理歷史記錄,然後移除webView,在銷燬webview,最後在將webview置為null
webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); //載入null資料
webview.clearHistory(); //清除歷史記錄
webview.getParent().remove(webview); //移除webview
webview.destroy(); //銷燬webview
webview = null; //將webview置為null

相關推薦

移動開發------Android WebView 基本使用

轉載於: http://blog.csdn.net/lowprofile_coding/article/details/77928614   WebView介紹 Android WebView在Android平臺上是一個特殊的View, 基於webkit引擎、展現

Android WebView基本使用

轉載請註明出處: http://blog.csdn.net/lowprofile_coding/article/details/77928614 WebView介紹 Android WebView在Android平臺上是一個特殊的View, 基於w

android webview一篇文章全面瞭解(基本使用,url攔截,js跟java互動)

1.前言 最近幾年混合應用越來越流行,及一部分功能用原生程式碼開發,一部分功能用html5實現。那什麼時候用原生什麼時候用網頁呢?很多人第一反應就是經常變化的頁面用網頁開發,避免經常發包,不全對。其實因為網頁使用體驗遠遠不及原生開發,所以一般有以下兩種情況建議

Android WebView載入最基本的程式碼

public class WebViewActivity extends Activity { @BindView(R.id.webview) WebView mWebView; private String url; @Ov

WebView 基本應用示例——Android 使用WebView在應用內部開啟web頁面

最近用到WebView 在應用內部載入URL 展示web頁面 ,順便貼出一個簡單的示例。 對於一般應用,僅用來展示web頁面的話,不需要複雜的處理邏輯,但新手在做的過程或許會遇到這樣的問題:(大牛可忽

Android WebView基本使用

1.介紹webView WebView是Android中提供用來瀏覽網頁的控制元件,WebView的引擎是webKit,只是在高低版本使用的不同核心的webKit,在Android4.4後直接使用了Chrome。 2.作用 1.用來展示網頁 2.可

android WebView(一)基本使用

WebView是Android用來載入網頁的元件,如果要使用此元件載入網上頁面,則需要新增網路許可權: <uses-permission android:name="android.permission.INTERNET"/>WebView和其他元件一樣可以

android webview緩存控制

spa led ebs roi androi and pca col .get WebSettings settings = webView.getSettings(); settings.setAppC

Android開發基本環境搭建

image studio 基本 配置環境 http 學習 配置 ide 進步 安卓開發學習筆記,共同學習,共同進步。 Android軟件開發首先要安裝JDK,本文以windows10 64操作系統為例演示安裝步驟。 1.下載JDK    2.安裝    3.配置環境變量  

android webview

對象 ren 四種 mes parent log ica function art 轉載請註明出處: http://blog.csdn.net/lowprofile_coding/article/details/77928614 WebView介紹 Android Web

android webview處理h5打開本地文件瀏覽器的功能

utility || 簡單的 mfile () 怎樣 測試的 params 後來 這周遇到一個比較棘手的問題,需要在android上邊集成h5頁面,並且在h5頁面上,需要用戶能夠上傳android本地的照片,一開始我以為webview會自動處理掉的,因此沒太留意,當真正集成

Android ContentProvider基本用法

truct 數據共享 implement notify username 資源 per mime類型 exc 轉自:https://www.jianshu.com/p/601086916c8f 一、基本概念 ContentProvider是Android系統中提

android webview can‘t get vertx session

vertx session blankandroid webview can't get session when using target="_blank" with <a> link.### Version 3.5.1 (maybe 3.5.0 included,n

最近排查android webview https的發熱耗電和加載速度慢問題解決

android webview https profiler setBlockNetworkImag 最近排查android webview https的發熱耗電和加載速度慢問題問題:H5頁面發熱耗電排查:通過android studio profiler 查看CPU消耗曲線,發現靜置情況

Android WebView 加載超長 JS 數據

int strong catch [] size set native logs 業務 在之前的文章裏面,我總結過WebView如何與網頁交互,也就是Java如何和JS交互 —— Android WebView 總結 —— Java和JavaScript交互。 基於這篇文章

Android Studio 第七十六期 - Android webview長按識別二維碼

ont hub oid 技術分享 qrc p s code android 二維碼 代碼已經整理好,效果如下圖: 地址:https://github.com/geeklx/myapplication2018/tree/master/p019_shibi

android webview JS傳值 prompt

near gravity should 使用 sre pen you eat fir 1. <!DOCTYPE html> <html style="min-height: 100%"> <head> <meta cha

Android-WebView的使用.

現在很多App裡都內建了Web網頁(Hybrid App),比如說很多娛樂平臺 段子,最右等等,如下圖 那麼這種該如何實現呢?其實這是Android裡一個叫WebView元件實現 今天,我將獻上一份全面介紹 WebView的常見用法。   1. 簡介 W

Android WebView擷取所有內容生成長圖在5.0以上系統異常問題

最近在做webview擷取所有內容生成長圖時出現一些問題,在Android5.0以下系統能正常生成長圖,但是在5.0以上會出現只能擷取第一屏的內容,剩下的全部為空白,檢視資料發現原來是系統在5.0+版本上,Android對webview做了優化,為了減少記憶體佔用以提高效能,因此在預設情況下會智慧的

Android hybrid 開發實踐(android webview)

關於Android 和 h5 hybrid 開發的實踐在網上有很多,Android自身就有一個webview,很多實踐都是通過webview來實現的,以下是記錄一下自己的實踐。 1、Android與H5通訊方式 主要有兩種:有基於url攔截的,也有基於prompt攔截的。