一:一个简单的webview实现
webview webview=new webview(this);
webview.getSettings.setJavaScriptEnabled(true);// 开启javascriptwebview.loadUrl("http://www.baidu.com"); //需要添加访问网络权限
二:webview加载本地资源
假如我们有一张放在assets/image文件夹下,名字是book.jpg,那么我们也可以使用webview来加载这个图片
webview.getSettings.setBuiltInZoomControls(true);//允许用户缩小或者放大内容
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
webview.getSettings.setDisplayZoomControls(false);//当api大于11的时候,隐藏放大缩放按钮
}
webview.loadUrl("file:///android_asset/image/book.jpg");
假如我们有一个html的字符串
String html="<h1>静夜思</h1>";
webview.loadData(html, "text/html", "utf-8");
三:webview事件
1:默认情况下,没有指定webviewclient,webview会将一个url传递给activitymanager,而activitymanager则会用浏览器打开。我们只需要给
webview.setWebviewClient(new WebViewClient())
设置一个简单的webviewclient,就可以让webview自己打开url,因为其中的shouldoverrideurlloading的默认实现会简单返回false。也就是说如果不想让webview自己处理url,就返回true,这样浏览器应用程序就会处理。
2:WebViewClient简单实现
private WebViewClient mClient=new WebViewClient({
@Override
public boolean shouldOverrideUrlLoading(WebView view,String url){
Uri uri=Uri.parse(url);
if(TextUtils.equals(uri.getAuthority(),"www.google.com")){
//获取uri中的主机名,www.google.com就是主机名,对比两个是否一致,如果一致就继续使用webview加载
return false;
}
//如果不是www.google.com的主机名的url,就启动浏览器加载
return true;
}
};
四:通过javaScript操作html
1:准备一个html
<html>
<form name="input" action="form.html" method="get">
Enter Email:<input type="text" id="emailAddress"/>
<input type="submit" value="Submit"/>
</html>
2:注入js到html中
通过给自定义接口设置一个别名
private static final String JS_SETELEMENT="javascript:document.getElementById('%s').value='%s'";
private static final String JS_GETELEMENT="javascript:window.BRIDGE.storeElement('%s',document.getElementById('%s').value)";
private static final String ELEMENTID="emailAddress";
//自定义的java接口
private class MyJavaScriptInterface{
@SuppressWarnings("unused")
public void storeElement(String id,String element){
SharedPreferences.Editor editor=getPreferences(Activity.MODE_PRIVATE).edit();
editor.putString(id,element);
editor.commit();
if(!TextUtils.isEmpty(element)){
Toast.makeText(context,element,Toast.LENGTH_SHORT).show();
}
}
}
//自定义webviewclient,当点击链接的时候,注入js保存数据,当新页面加载完成时,还注入js,取出数据。
private WebViewClient mClient=new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView webView,Url url){
webView.loadUrl(String.format(JS_GETELEMENT,ELEMENTID,ELEMENTID));
return false;
}
@Override
public void onPageFinished(WebView webView,String url){
SharedPreferences prefs=getPreferences(Activity.MODE_PRIVATE);
webview.loadUrl(String.format(JS_SETELEMENT,ELEMENTID,prefs.getString(ELEMENTID,""));
}
}
private void executeJavascript(WebView view,String script){
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
view.evaluateJavascript(script,null);
}else{
view.loadUrl(script);
}
}
注,事例出自该书,有改动https://item.jd.com/11780673.html
网友评论