Android WebView使用总结
1.shouldOverrideUrlLoading
Android系统在API21(也就是Android5.0)时更新了shouldOverrideUrlLoading方法,原
public boolean shouldOverrideUrlLoading(WebView view, String url)被标记为过时,google新增了
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)方法来代替。
从源码来看,
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return shouldOverrideUrlLoading(view, request.getUrl().toString());
}
新方法内部仍然调用了原旧方法,不过比之前的方法更为强大。当我们更新targetSdkVersion以适配新系统特性时,为保证兼容性,在设置
setWebViewClient建议两个方法均调用,可如下进行:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//代码逻辑
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
//代码逻辑
}
return true;
}
});
2.加载本地资源
try {
StringBuilder content = new StringBuilder();
InputStream stream = this.getAssets().open("demo.html");
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line;
while((line = reader.readLine()) != null)
{
content.append(line);
content.append('\n');
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
String html = content.toString();
webView.loadDataWithBaseURL("file:///android_asset/",html,"text/html","utf-8",null);
3.支持JS
webView.getSettings().setJavaScriptEnabled(true);//支持JS
webView.addJavascriptInterface(jsObject,"jsObjectName");//添加JS接口
4.加载播放H5本地视频
自动播放
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.loadUrl("javascript:(function() { var videos = document.getElementsByTagName('video'); for(var i=0;i<videos.length;i++){videos[i].play();}})()");