前言
好久沒在CSDN寫博客了,最近有時間把一些之前項目期總結的東西,傳上來給大家分享,這是本人花了3天獨自翻譯的.希望能夠幫助,同時也希望大家可以指明錯誤.博主會更努力,那下面緊接着是WebView的一個小翻譯系列.
導航
WebView的介紹
http://blog.csdn.net/l540675759/article/details/54709676WebView翻譯的API大全
http://blog.csdn.net/l540675759/article/details/54709664WebView設置之WebViewClient
http://blog.csdn.net/l540675759/article/details/54709687WebView設置之WebChromeClient
http://blog.csdn.net/l540675759/article/details/54709680WebView設置之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事件處理之前執行)