摘要:將的高度設置成將會出現如下行為的高度被設置成了固定值,這意味著相對于高度的元素大小可能不正確對于應用程序所在設備是及更早的標簽將會被忽略以保證向后的兼容性不支持使用的布局寬度。
WebView 是一個顯示網頁內容的組件,可以顯示網絡上的一些在線內容并且可以作為 Web 瀏覽器滾動顯示的內容,它使用 WebKit作為渲染引擎來顯示網頁,里面包括放大、縮小、執(zhí)行文本搜索等進行前后導航的方法。
注意 :如果要在 WebView 中顯示在線網頁等內容時,需要在 AndroidManifest.xml 文件中添加網絡權限,參考如下:
基本用法
默認情況下 WebView 不啟用 JavaScript ,網頁錯誤也將被忽略,如果僅僅是在 UI 上顯示一段 HTML,這就會非常好, 用戶在不需要再閱讀之前與用戶交互,網頁不需要與用戶交互 ,如果你需要一個完整的瀏覽器,你需要調用相應的 Intent 去啟動瀏覽器去執(zhí)行某些操作,而不是使用 WebView 來顯示,調用系統(tǒng)瀏覽器使用如下代碼:
Uri uri = Uri.parse("https://www.example.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
使用 WebView 主要有兩種使用方式,在 Activity 等 onCreate() 方法直接創(chuàng)建使用或者在布局文件中引入,參考如下:
1. 在代碼中直接創(chuàng)建 WebViewWebView webview = new WebView(this); //這里將整個 Activity 窗口作為 WebView 的顯示界面,也可多帶帶放在某個布局中 setContentView(webview);2. 在布局文件中使用 WebView
那么,我們如何加載一個網頁呢,如果網頁是本地的又如何加載呢,還有如何加載一段 HTML 的片段呢,常用的加載方法主要有兩個,如下:
1. 加載一個完整的網頁這里測試使用百度首頁、CSDN首頁、騰訊首頁進行測試,測試百度首頁時,需要設置如下屬性網頁內容才能正確顯示,如果不設置將顯示為白屏:
webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webView.loadUrl("https://www.baidu.com");
測試 CSDN 首頁時,會提示打開系統(tǒng)帶瀏覽器的應用去打開該頁面,設置如下屬性才能直接加載網頁內容:
webView.setWebViewClient(new WebViewClient()); webView.loadUrl("http://blog.csdn.net");
測試騰訊首頁時可以直接加載首頁內容:
webView.loadUrl("http://www.qq.com");
測試環(huán)境可能不同,結果也不相同。
2. 加載本地的 HTML 文件其中加載 SD 卡上的 HTML 文件時要申請訪問 SD 卡上的權限 Manifest.permission.WRITE_EXTERNAL_STORAGE,參考如下:
//加載 assets 目錄下的 HTML 文件 webView.loadUrl("file:///android_asset/mine.html"); //加載 SD 卡上的 HTML 文件 webView.loadUrl("file:///"+Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+"mine.html");3. 加載 HTML 片段
加載 HTML 片段時,要設置字符集,否則會出現亂碼,參考如下:
//加載 HTML 片段,設置字符集防止亂碼出現 webView.loadData(Util.getHtmlData(),"text/html; charset=UTF-8",null);
WebView 的設置與界面處理主要有以下幾個方面:
創(chuàng)建并設置 WebChromeClient,主要是輔助 WebView 來處理 JavaScript 的對話框、網站標題、加載進度等;
創(chuàng)建并設置 WebViewClient, 主要是提供各種事件的回調等;
通過 WebSetting 對象可以設置 WebView 的各種相關屬性,如支持 JavaScript 、設置 WebView 緩存、字體大小等;
JS 與 Java 的互相調用,如使用addJavascriptInterface(Object,String)方法將Java對象注入WebView。此方法允許您將Java對象注入到頁面的JavaScript上下文中,以便可以通過頁面中的JavaScript訪問它們。
縮放Android 1.5 之后支持調用如下方法啟用內置縮放:
WebSettings.setBuiltInZoomControls(boolean)
注意:設置了內置縮放,WebView 的寬高又是 wrap_content,將會導致未定義的行為,使用時應該避免這種情況。
構建網頁以支持不同的屏幕密度屏幕密度是基于屏幕分辨率的,低密度的屏幕每英寸可用像素更少,高密度的屏幕每英寸可用像素更多,屏幕密度是比較重要的,因為其他因素相同的情況下,根據像素定義的 UI 元素,在低密度屏幕上顯示較大,在較高屏幕密度的屏幕上顯示較小;為了方便 Android 將實際中的屏幕密度換算成比較廣泛的屏幕密度:高、中和低。
默認情況下,WebView 縮放的網頁,使其繪制的尺寸與中密度屏幕上的默認外觀相匹配,所以在高密度屏幕上適用于 1.5 倍的縮放(像素較小),在低密度屏幕上適用于 0.75 倍的縮放(像素較大);從 Android 2.0 開始 WebView 支持 DOM、CSS 及 meta 標簽,幫助 Web 開發(fā)人員根據不同的屏幕密度來適配目標屏幕。
下面是處理不同屏幕密度的一些說明:
使用 window.devicePixelRatio 屬性指定當前設備的默認縮放因子,也指設備上物理像素和設備獨立像素(device-independent pixels (dips))的比例,如果 window.devicePixelRatio 的值為 1 ,則該設備被認為是中密度(mdpi)設備,并且默認縮放不應用于網頁,如果 window.devicePixelRatio 值為原來的 1.5 倍 ,則該設備被認為是高密度設備(hdpi),頁面內容縮放為 1.5 倍;如果 window.devicePixelRatio 值為 0.75,則該設備被認為是低密度設備(ldpi),內容縮放為原來的 0.75 倍,用公式表示如下:
window.devicePixelRatio(dpr) = physical pixel / dips(css pixel)} physical pixel = dips * density / 160} (Android)
使用 -webkit-device-pixel-ratio CSS 媒體查詢來指定使用此樣式表的屏幕密度,其值應該為 0.75 、1 、1.5,分別指明這些樣式表適用于低密度、中密度、高密度的屏幕設備,如下面的聲明表明 hdpi.css 只適用于屏幕像素密度比例為 1.5 的屏幕設備,也就是適用于高密度屏幕設備。
HTML5 視頻支持
如果在應用程序中支持 HTML 視頻,需要啟用硬件加速。
關于硬件加速請參考:Android硬件加速
全屏支持為了支持全屏幕,如視頻或其他 HTML 內容,需要設置一個 WebChromeClient 并實現 onShowCustomView(View,WebChromeClient.CustomViewCallback) 和 onHideCustomView() 兩個方法:
1. onShowCustomView通知應用程序當前頁面進入全屏模式,應用程序將以全屏模式包含 Web 內容、視頻以及其他 HTML 的內容。
/** * @param view 顯示的View. * @param callback 調用當前頁退出當前頁 * full screen mode. */ public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {};2. onHideCustomView
通知應用程序當前頁面退出全屏模式,應用程序必須隱藏自定義的 View。
public void onHideCustomView() {}
如果這兩個方法中的任何一個沒有實現,則對應的頁面的 Web 頁面不能進入全屏模式,也可以實現 getVideoLoadingProgressView() 來自定義視頻緩沖時要顯示的視圖。
public View getVideoLoadingProgressView() { return null; }HTML5 地理位置 API
針對 Android N 以及 API level > M 的設備,地理位置 API 僅僅支持以 HTTPs 的方式,如果應用以非 HTTPS 的方式請求地理位置 API onGeolocationPermissionsShowPrompt(String, GeolocationPermissions.Callback) 方法將會被拒絕調用。
布局尺寸建議將 WebView 的高度設置成固定值或者是 MATCH_PARENT 而不建議使用 WRAP_CONTENT ,如果 WebView 的高度使用了 MATCH_PARENT ,它的父布局高度實用 WRAP_CONTENT 會導致石梯大小不一致。
將 WebView 的高度設置成 WRAP_CONTENT 將會出現如下行為:
HTML 的高度被設置成了固定值,這意味著相對于 HTML BODY 高度的元素大小可能不正確;
對于應用程序所在設備是 Android 4.4 及更早的 SDk, meta 標簽將會被忽略以保證向后的兼容性;
不支持使用 WRAP_CONTENT 的布局寬度。如果使用這樣的寬度,WebView 會嘗試使用其父布局的寬度。
關于錯誤數據的收集如果用戶同意,WebView 的一些診斷數據將會以匿名的方式上傳到 Google ,這些數據會幫助 Google 改善 WebView ,每個已初始化 WebView 的應用程序都會收集這些數據,如果想停用該功能需要在清單文件中進行如下設置:
參考鏈接:WebView 官網介紹
如果覺得對自己有幫助,可以關注公眾號:jzman-blog,一起交流學習。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104642.html
摘要:根據標準,到目前為止,一共有種緩存機制,有些是之前已有,有些是才新加入的。首次請求緩存有效期內請求緩存過期后請求一般瀏覽器會將緩存記錄及緩存文件存在本地文件夾中。 騰訊 Bugly 特約作者:賀輝超 1. H5 緩存機制介紹 H5,即 HTML5,是新一代的 HTML 標準,加入很多新的特性。離線存儲(也可稱為緩存機制)是其中一個非常重要的特性。H5 引入的離線存儲,這意味著 web ...
閱讀 2624·2021-11-18 10:07
閱讀 1083·2021-08-03 14:04
閱讀 726·2019-08-30 13:08
閱讀 2579·2019-08-29 15:33
閱讀 1087·2019-08-29 14:07
閱讀 2985·2019-08-29 14:04
閱讀 1435·2019-08-29 11:19
閱讀 1144·2019-08-29 10:59