關於webview載入網頁,返回後總是重新整理頁面問題解決
最近用webview發現返回上個頁面總是又自動重新整理頁面,我的需求是進入下頁的時候不用快取,而返回上個頁面的時候不要重新整理頁面回到頂部,要保持在原來頁面進入下頁的位置。
首先來了解一下webview載入網頁的幾個模式,即websetting中設定的載入模式。websetting.setCacheMode( int mode)。
LOAD_CACHE_ELSE_NETWORK:只要本地有,無論是否過期,或者no-cache,都使用快取中的資料。
LOAD_CACHE_ONLY:只加載快取資料,如果沒有快取資料,就出現載入失敗;
LOAD_DEFAULT:預設載入方式,根據cache-control決定是否從網路上取資料;
LOAD_NO_CACHE:不使用快取,只從網路獲取資料;
LOAD_CACHE_NORMAL: API level 17中已經廢棄,
從API level 11開始作用同LOAD_DEFAULT模式
想要返回的時候不重新獲取資料,重新整理頁面就需要設定模式LOAD_CACHE_ELSE_NETWORK,進入下頁時不採用快取資料需要設定模式 LOAD_DEFAULT 或者 LOAD_NO_CACHE,程式碼如下:
public class WebViewActivity extends Activity{ private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_webview); mWebView = (WebView) findViewById(R.id.webview); initWebView(); mWebView.loadUrl("http://www.baidu.com"); } private void initWebView() { WebSettings ws = mWebView.getSettings(); ws.setJavaScriptEnabled(true); mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ if(mWebView.canGoBack()){ mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); mWebView.goBack(); return true; } } return false; } }
另外記錄幾個websetting常用的幾個設定:
webSettings.setDomStorageEnabled ( boolean );//是否支援持久化儲存,儲存到本地
webSettings.setJavaScriptEnabled ( boolean );//設定支援javascript指令碼
webSettings.setSupportZoom ( boolean ) ;// 設定支援縮放
webSettings.setBuiltInZoomControls ( boolean );//設定是否出現縮放工具
webSettings.setDatabaseEnabled ( boolean );//開啟database storage API 功能
webSettings.setDatabasePath(path);//設定資料庫快取路徑
webSettings.setAppCacheEnabled(
boolean );//設定開啟application H5 Caches 功能
webSettings.setAppCachePath(path);//設定application
caches 快取目錄
//設定webview自適應螢幕
webSettings.setLayoutAlgorithm ( LayoutAlgorithm.SINGLE_COLUMN );
webSettings.setLoadWithOverviewMode ( true );