1、WebView的添加同絕大多數控件同樣,主要有兩種添加方式:第一,相似於普通控件的定義,先在xml文件裏添加webview控件,再經過findViewById()得到;第二種方式以下:web WebView webView = new WebView(this);瀏覽器 setContentView(webView);緩存
網頁的加載:webView,loadUrl("http://www.hzeduask.com"); //這裏是所有域名ide 本地文件的加載:webView.loadUrl("file:///android_asset/aaa.html"); 文件放在目錄下assets文件夾下,也能夠加載sd卡本地html文件(file://不能少)字體
// 訪問頁面中有JavaScript,必須設置支持JavaScriptui webView.getSettings().setJavaScriptEnabled(true); // 啓用WebView訪問文件數據 webView.getSettings().setAllowFileAccess(true); // 設置支持縮放 webView.getSettings().setSupportZoom(true); webView.getSettings().setBuiltInZoomControls(true); // 設置縮放比例 webView.setInitialScale(35); // 設置是否顯示網絡圖像---true,封鎖網絡圖片,不顯示 false----容許顯示網絡圖片 webView.getSettings().setBlockNetworkImage(false); // 設置支持插件 webView.getSettings().setPluginsEnabled(true); // 將圖片調整到適合WebView大小 webView.getSettings().setUseWideViewPort(true); // 支持多窗口 webView.getSettings().supportMultipleWindows(); // 設置自動加載圖片 webView.getSettings().setLoadsImagesAutomatically(true); // 設置渲染優先級 webView.getSettings().setRenderPriority(RenderPriority.HIGH); // 設置默認字體大小 webView.getSettings().setDefaultFontSize(50); // 若是須要用戶輸入帳號密碼,必須設置支持手勢焦點 webView.requestFocusFromTouch(); // 取消滾動條 webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
WebSettings.LOAD_CACHE_ELSE_NETWORK---只要本地有,不管是否過時,都使用緩存數據;只要打開過一次就使用緩存數據 WebSettings.LOAD_CACHE_ONLY---只使用緩存 WebSettings。LOAD_NO_CACHE---不使用緩存 WebSettings.LOAD_DEFAULT---控制器決定是否從網絡獲取數據,不管若是都從網絡獲取數據,沒有網絡就報錯 WebSettings.LOAD_NORMAL---同默認 // 設置緩存模式 webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // 啓用緩存 webView.getSettings().setAppCacheEnabled(true); // 設置最大緩存容量---100M webView.getSettings().setAppCacheMaxSize(1024 * 1024 * 100);
一、WebViewClient主要爲WebView處理各類通知、請求事件。setWebViewClient()該方法做用於點擊連接時調用,點擊跳轉時,加載新的webview資源,並能夠在加載先後添加操做,好比添加緩衝對話 框,該方法的做用使得點擊連接的響應在WebView內執行,而不是手機瀏覽器。 webView.setWebViewClient(new WebViewClient() { //用於加載新WebView,返回true表明着用完就消費掉 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } //用於加載新Webview以前,通常在此加載緩衝區 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon);
} //用於加載新Webview以後,通常在此消除緩衝區 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url);
} //加載錯誤時調用,通常提示錯誤信息 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl);
Toast.LENGTH_SHORT).show(); }
2.WebChromeClient主要輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等 webView.setWebChromeClient(new WebChromeClient(){
//打開新WebView時,設置加載進度,進度顯示於最上方標題位置 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); WebViewDemo.this.setProgress(newProgress*100); } //設置新WebView的標題,顯示於最上方標題位置 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); WebViewDemo.this.setTitle(title); } //建立新WebView,加載新資源,並設置 @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView child=new WebView(WebViewDemo.this); child.getSettings().setJavaScriptEnabled(true); child.getSettings().setAllowFileAccess(true); child.getSettings().setSupportZoom(true); child.getSettings().setBuiltInZoomControls(true); child.setInitialScale(35); child.getSettings().setBlockNetworkImage(true); child.getSettings().setPluginsEnabled(true); child.getSettings().setUseWideViewPort(true); child.getSettings().supportMultipleWindows(); child.getSettings().setLoadsImagesAutomatically(true); child.getSettings().setLoadWithOverviewMode(true); //經過WebViewTransport設置新WebView child.setWebChromeClient(this); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(child); resultMsg.sendToTarget(); return true; }
});
一、WebView的使用須要添加網絡權限 <uses-permission android:name="android.permission.INTERNET"/> 二、WebView的返回須要重寫Activity的onKeyDown方法,使得回退返回至上一級,若是不重寫,將會 徹底退出,代碼以下: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } |