WebView的基本使用

在Activity中WebView的基础设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
WebSettings settings = mWebView.getSettings();

settings.setBuiltInZoomControls(true);// 显示缩放按钮(wap网页不支持)
settings.setUseWideViewPort(true);// 支持双击缩放(wap网页不支持)

settings.setJavaScriptEnabled(true);//启用js
settings.setJavaScriptCanOpenWindowsAutomatically(true);//js和android交互
settings.setAllowFileAccess(true); // 允许访问文件
settings.setAppCacheEnabled(false); //设置H5的缓存打开,默认关闭
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//缓存设置
settings.setAllowUniversalAccessFromFileURLs(true);
settings.setUseWideViewPort(true);//设置webview自适应屏幕大小
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);//设置,可能的话使所有列的宽度不超过屏幕宽度
settings.setLoadWithOverviewMode(true);//设置webview自适应屏幕大小
settings.setDomStorageEnabled(true);//设置可以使用localStorage
settings.setSupportZoom(false);//关闭zoom按钮
settings.setBuiltInZoomControls(false);//关闭zoom

其他设置

修改urerAgent()

1
2
String urerAgent = settings.getUserAgentString();
settings.setUserAgentString(urerAgent + "XXX(前端需要你添加的一些标识)");

这里主要记录一下自己项目中碰到的问题

退出当前界面时 WebView还在播放音乐或者视频,finish当前Activity也不管用

解决方法:在Activity的onDestroy释放WebView

1
2
3
4
5
6
7
@Override
protected void onDestroy() {
if (mWebView != null) {
mWebView.destroy();
}
super.onDestroy();
}

开启缓存的前提下数据被缓存 一般可以直接调用下面方法进行缓存清除

比如设置了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
	WebSettings settings = mWebView.getSettings();
settings.setAppCacheEnabled(true); //设置H5的缓存打开,默认关闭
settings.setCacheMode(WebSettings.LOAD_DEFAULT); //设置 缓存模式
// 开启 DOM storage API 功能
settings.setDomStorageEnabled(true);
//开启 database storage API 功能
settings.setDatabaseEnabled(true);
String cacheDirPath = getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;
// String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.LRTZIAPP_DB_DIRNAME;
//设置数据库缓存路径
settings.setDatabasePath(cacheDirPath);
//设置 Application Caches 缓存目录
settings.setAppCachePath(cacheDirPath);
//开启 Application Caches 功能

直接调用下面方法就可以清除缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/** 
* 清除WebView缓存
*/
public void clearWebViewCache(){
//清理Webview缓存数据库
try {
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
}

//WebView 缓存文件
File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());

File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");
Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());

//删除webview 缓存目录
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
//删除webview 缓存 缓存目录
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
}

可是假如设置了不开启缓存 每次就算后台改了WebView的url数据还是被缓存呢?

1
2
WebSettings settings = mWebView.getSettings();
settings.setAppCacheEnabled(true); //设置H5的缓存打开,默认关闭

调用下面方法试试吧

1
2
3
4
5
6
7
8
9
//清理Webview缓存数据库  
public void clearCache(){
try {
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
}
}

关于WebView使用的其他问题碰到再记录下来

WebView的交互