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攔截的。