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
<link rel="stylesheet" media="screen" and  (-webkit-device-pixel-ratio : 1.5)" herf = "hdpi.css"/>

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(70);
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事件處理之前執行)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章