前言
好久沒在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事件處理之前執行)