主要点:
1.webview内部加载url,并且支持下载等重定向操作,应该设置webviewClient,这个client提供外部加载url时候对url的处理,return false即可,而不是我们经常见的loadurl,returntrue。
2.本地缓存,离网加载 设置缓存模式,并设置缓存路径即可
3.处理返回按钮逻辑:设置setOnkeyListener(),监听返回键
4 支付宝调起处理:在webviewclient中添加代码进行判断处理,因为调起时,并不是一个对外的www开头的网页url,而是一个客户端的请求:
if( url.startsWith("http:") || url.startsWith("https:") ) {
return false;
}
5.仍然未解决难题:webview返回上一个页面时候调用goback(),会对上一个页面进行刷新,没有办法保持原状态,这个如果大家知道解决方案,欢迎留言提供。
全部代码:
news_wv.loadUrl(BASE_URL);
news_wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
WebSettings settings = news_wv.getSettings();
settings.setJavaScriptEnabled(true);
//设置缓存模式
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// 开启DOM storage API 功能
settings.setDomStorageEnabled(true);
// 开启database storage API功能
settings.setDatabaseEnabled(true);
String cacheDirPath = getActivity().getFilesDir().getAbsolutePath() + APP_CACHE_DIRNAME;
// 设置数据库缓存路径
settings.setAppCachePath(cacheDirPath);
settings.setAppCacheEnabled(true);
news_wv.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Uri uri=Uri.parse(url);
Intent intent=new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
news_wv.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == MotionEvent.ACTION_UP)&&news_wv.canGoBack()) {
handler.sendEmptyMessage(WEBVIEW_GOBACK);
return true;
}
return false;
}
});