WebView全面總結
Webview在我們平時開發中十分常用,幾乎專案裡面都會有巢狀網頁。但是Webview可不是像我們平時loadUrl()就完了,它還有很多屬性方法我們平時可能就沒有開發出來。
-
前進 / 後退網頁
//是否可以後退 Webview.canGoBack() //後退網頁 Webview.goBack() //是否可以前進 Webview.canGoForward() //前進網頁 Webview.goForward() //以當前頁面為準,前進或者後退到歷史記錄中指定的steps頁面數 //如果steps為負數則為後退,正數則為前進 Webview.goBackOrForward(int steps)
-
按系統back鍵怎麼控制網頁後退而不是直接關閉webview?
在當前展示Webview的Activity中處理Back事件,監聽系統back鍵點選,在其中呼叫webview.goBack()方法。
public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
-
WebSettings類有哪些屬性可以設定?
WebSettings webSettings = webView.getSettings(); //設定支援javascript webSettings.setJavaScriptEnabled(true); //支援外掛 webSettings.setPluginsEnabled(true); //設定自適應螢幕,兩者合用 webSettings.setUseWideViewPort(true); //將圖片調整到適合webview的大小 webSettings.setLoadWithOverviewMode(true); // 縮放至螢幕的大小 //縮放操作 webSettings.setSupportZoom(true); //支援縮放,預設為true。是下面那個的前提。 webSettings.setBuiltInZoomControls(true); //設定內建的縮放控制元件。若為false,則該WebView不可縮放 webSettings.setDisplayZoomControls(false); //隱藏原生的縮放控制元件 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //關閉webview中快取 webSettings.setAllowFileAccess(true); //設定可以訪問檔案 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支援通過JS開啟新視窗 webSettings.setLoadsImagesAutomatically(true); //支援自動載入圖片 webSettings.setDefaultTextEncodingName("utf-8");//設定編碼格式 //優先使用快取 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
-
Webview屬性
webView.clearCache(true);清除快取 webView.clearHistory();清除歷史記錄 webView.reload();重新載入
-
WebViewClient回撥方法:
1、shouldOverrideUrlLoading()開啟網頁時不呼叫系統瀏覽器, 而是在本WebView中顯示;
webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
2.onPageStarted()開始載入頁面呼叫
3.onPageFinished()載入頁面結束呼叫
-
WebChromeClient類
onProgressChanged()方法,回撥載入網頁進度,如有需要設定載入進度,可以在其中設定。
webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { } });
-
Webview記憶體洩漏解決
1、在使用webview時不用xml佈局中引用,在程式碼中建立並用viewgroup呼叫addView()的方式。
2、在使用Activity的onDestroy方法中,讓webview載入空,移除webview,webview銷燬並置null。
@Override protected void onDestroy() { if (mWebView != null) { mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); mWebView.clearHistory(); ((ViewGroup) mWebView.getParent()).removeView(mWebView); mWebView.destroy(); mWebView = null; } super.onDestroy(); }
-
Webview設定快取機制
WebSettings settings = webView.getSettings(); //設定快取路徑 String cacheDirPath = getFilesDir().getAbsolutePath()+"cache/"; settings.setAppCachePath(cacheDirPath); //設定快取大小 settings.setAppCacheMaxSize(20*1024*1024); //開啟AppCache儲存機制 settings.setAppCacheEnabled(true);
-
啟動指定瀏覽器
在Android程式中我們可以通過傳送顯式Intent來啟動指定的瀏覽器。例如,啟動手機自帶瀏覽器。
Intent intent =newIntent(); intent.setAction("android.intent.action.VIEW"); Uri content_url =Uri.parse("https://www.baidu.com"); intent.setData(content_url); intent.setClassName("com.android.browser","com.android.browser.BrowserActivity"); startActivity(intent);
啟動其他瀏覽器,只要修改以intent.setClassName(package,activity)中2個引數,對應的應用瀏覽器程式packagename和要啟動的activity即可啟動其他瀏覽器。
uc瀏覽器 | com.uc.browser | com.uc.browser.ActivityUpdate |
---|---|---|
opera瀏覽器 | com.opera.mini.android | com.opera.mini.android.Browser |
qq瀏覽器 | com.tencent.mtt | com.tencent.mtt.MainActivity |
Webview基本功能總結如上,最後,還有其他功能Webview與Android互動。