天天看點

WebView的介紹

前言

好久沒在CSDN寫部落格了,最近有時間把一些之前項目期總結的東西,傳上來給大家分享,這是本人花了3天獨自翻譯的.希望能夠幫助,同時也希望大家可以指明錯誤.部落客會更努力,那下面緊接着是WebView的一個小翻譯系列.

導航

WebView的介紹

http://blog.csdn.net/l540675759/article/details/54709676

WebView翻譯的API大全

http://blog.csdn.net/l540675759/article/details/54709664

WebView設定之WebViewClient

http://blog.csdn.net/l540675759/article/details/54709687

WebView設定之WebChromeClient

http://blog.csdn.net/l540675759/article/details/54709680

WebView設定之WebSettings

http://blog.csdn.net/l540675759/article/details/54709690

WebView介紹

WebView的使用簡介

==WebView 在使用的時候,主要設定三大部分内容:==

(1)WebChromeClient

得到浏覽器内部的回報,包括加載情況以及對JavaScript的回報.

(2)WebViewClient

設定加載Web内容的相關,包括展示錯誤的回報.

(3)WebSetting

WebView的内部設定,可以設定其和JavaScript的互動.

==WebView 進行變焦(放大,縮小)設定==

開啟方法:

webview.setBuiltInZoomControls(boolean)
           

注意:在布局自适應的情況下,可能會出現加載問題.

WebView的痕迹(記錄)管理,以及視窗管理

(1)WebView的痕迹,使用附屬Application的緩存,并且App的資料不會浏覽器共享.

(2)Activity轉屏或者會影響轉屏的操作,都會使WebView重新加載之前的界面,如果不希望看到這樣,那麼請在清單檔案中,對Activity進行設定.

建構WebView頁面來支援不同的螢幕密度

對于不同的硬體,低密度意味着手機本身可使用的螢幕區域少,而高密度意味着手機可使用的螢幕區域大.

(1)WebView預設展示的是中等密度,它在1.5x和0.75x的螢幕密度下可以良好的展示.

(2)WebView支援CSS,DOM,以及各種(前端)網頁标簽.

==處理不同的螢幕密度的方法==

  • [x] DOM的權重比
  • Window.devicePixelRatio
  • 預設情況下這個值為1.(在這個值的狀況下,屬于标準情況,不會放大也不會縮小).
  • (高螢幕密度)1.5x情況下,意味着顯示内容是按比例擴大1.5倍.
  • (低螢幕密度)0.75x情況下,意味着顯示内容是按比例縮小0.75倍.
  • [x] CSS相關的權重比,可以直接指定
  • -webkit-device-pixel-ratio
  • 對應高、中、低螢幕密度分别對應的值為1.5,1,0.75.
  • eg

HTML5 Video Support

==為了支援HTML5視訊内鍊在應用中,需要進行硬體加速。==

充滿螢幕設定

WebChromeClient:

  • [x] onShowCustomView(View, CustomViewCallBack)
  • 當HTML5播放器需要進行全屏播放操作,然後需要先将webView從視圖移除,然後加載(需要顯示的Video或者其他的)View元件。
  • [x] onHideCustomView()
  • 此時需要将正在全屏播放的View隐藏掉,并且加載WebView元件。
  • [x] getVideoLoadingprogress()
  • 設定HTML5視訊播放器播放第一幀之前的加載動畫。

支援HTML5的定位請求

如果需要進行定位請求,安卓的SDK版本必須大于N包,并且如果必須使用Https,如果一些應用使用http進行定位請求,那麼會彈出不安全提示,并且需要使用者下放權限。

使用WebView布局相關

(1)使用WebView時,建議使用MATCH_PARENT或者固定值來代替WRAP_CONTENT防止顯示時,布局出現問題。

設定成“WRAP_CONTENT“會有以下行為:

(1)如果HTML元素被設定成固定值,那麼将意味着HTML的元素顯示會有問題。

(2)在Android KitKat版本HTML的标簽被忽略,為了更好的向後相容,是以WebView不支援WRAP_CONTENT,如果使用該标簽,那麼會使用父布局的寬高尺寸。

使用者隐私

預設情況下,谷歌會私自上傳WebView的崩潰日志,用來幫助谷歌更改的對WebView進行改善,但是設定

<meta-data 
android:name ="android.webkit.webview.MetricsOptout"
android:value ="true"/>
           

WebView加載網頁基本用法

webview是android中的浏覽器控件,在一些手機應用中常會用到b/s模式去開發應用,這時webview的強大功能就會顯示出來。

1、webview的幾點設定
           

==權限設定:==

AndroidManifest.xml中必須使用許可”android.permission.INTERNET”,否則會出Web page not available錯誤.

==js開放設定:==

如果通路的頁面中有Javascript,則webview必須設定支援Javascript。webview.getSettings().setJavaScriptEnabled(true); 否則,頁面的js将不會起作用.

==滾動條設定:==

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

==設定緩存模式:==

setCacheMode

==要注意的是,其中的webView的一系列用法,比如==

webView.getSettings().setJavaScriptEnabled(true);設定可以使用javscript;
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setHorizontalScrollBarEnabled(false);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setInitialScale();
webView.setHorizontalScrollbarOverlay(true);
           

傳回處理

如果不做任何處理,浏覽網頁,點選系統“Back”鍵,整個Browser會調用finish()而結束自身,如果希望浏覽的網頁回退而不是推出浏覽器,需要在目前Activity中處理并消費掉該Back事件。

public boolean onKeyDown(int keyCode, KeyEvent event) {
  if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) 
{
  mWebView.goBack();
  return true;
  }
  return super.onKeyDown(keyCode, event);
  }
           

支援javascripte自定義對象

可以通過addJavascriptInterface()方法,添加js自定義對象,使用web頁面與手機java程式能夠進行通信互動。

  

DownloadListener接口

該接口裡面有一個方法,onDownloadStart()下載下傳偵聽接口,如果客戶代碼實作該接口,則在下載下傳開始、失敗、挂起、完成等情況下,DownloadManagerCore對象會調用客戶代碼中實作的DownloadListener方法。

  

幾個注意點

1)為了讓WebView從apk檔案中加載assets,Android SDK提供了一個schema,==字首為”file:///android_asset/”。WebView遇到這樣的schema,就去目前包中的 assets目錄中找内容==。如上面的”file:///android_asset/demo.html”

2)==addJavascriptInterface方法中要綁定的Java對象及方法要運作另外的線程中,不能運作在構造他的線程中,這也是使用Handler的目的==(今天我是在沒有在handler中處理,是以導緻webviewclient中的onPageStart方法與addJavascriptInterface中的方法起了沖突,二個人的執行順序時常互換,之後改成handlder實作,就解決其中的問題,正确的順序是onPageStart在addJavascriptInterface中的handlder事件處理之前執行)

繼續閱讀