Android 控件: 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模式
新的需求:(点击返回键,返回到上一个点击的页面但是不刷新,点击新的页面进行刷新加载,这个需求是要求与 iOS 的浏览效果保持一致)
1 public class WebViewActivity extends Activity{ 2 3 private WebView mWebView; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_webview); 8 9 mWebView = (WebView) findViewById(R.id.webview); 10 11 initWebView(); 12 13 mWebView.loadUrl("http://www.baidu.com"); 14 } 15 16 private void initWebView() { 17 WebSettings ws = mWebView.getSettings(); 18 ws.setJavaScriptEnabled(true); 19 mWebView.setWebViewClient(new WebViewClient(){ 20 @Override 21 public boolean shouldOverrideUrlLoading(WebView view, String url) { 22 view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 23 view.loadUrl(url); 24 return super.shouldOverrideUrlLoading(view, url); 25 } 26 }); 27 } 28 29 @Override 30 public boolean onKeyDown(int keyCode, KeyEvent event) { 31 if(keyCode==KeyEvent.KEYCODE_BACK){ 32 if(mWebView.canGoBack()){ 33 mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 34 mWebView.goBack(); 35 return true; 36 } 37 } 38 return false; 39 } 40 }
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 );