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模式
新的需求:(点击返回键,返回到上一个点击的页面但是不刷新,点击新的页面进行刷新加载,这个需求是要求与 iOS 的浏览效果保持一致)
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;
}
}
webview 的其他一些设置:
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 );