WebView组件是Android用于显示网页的,它内置了WebKit引擎,WebKit是一个开源的浏览器引擎,Chrome浏览器也是基于它,所以我们可以把WebView当做一个轻量级的浏览器使用。
使用WebView需要在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
使用WebView加载网页:
1.加载外部服务器网页
//只有这句会跳转出当前的activity
webView.loadUrl("http://www.baidu.com");
//网页显示到activity中
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
2.加载本地网页
//这里的格式是固定的,文件夹assets目录下
webView.loadUrl("file:///android_asset/XXX.html");
3.加载html数据
String data = "<html><body>this is my webview.</body></html>";
webView.loadData(data, "text/html", "utf-8");
POST方法传递参数:
String postData = "name=zhangsan&age=25";
webView.postUrl(url, EncodingUtils.getBytes(postData, "utf-8"));
WebView参数设置:
WebSettings webSettings = webView.getSettings();//获取设置对象
webSettings.setSavePassword(true);//保存密码
webSettings.setSaveFormData(true);//保存表单数据
webSettings.setJavaScriptEnabled(true);//WebView默认是不支持javascript的
webSettings.setSupportZoom(true);//缩放
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//在内容内部显示
webView.goBack();//返回
webView.goForward();//前进
webView.stopLoading();//停止加载
webView.requestFocus();//如果不设置的话,会出现不能弹出软键盘等问题
实现与JS交互:
public class WebViewActivity extends Activity {
String url = "";
private WebView webView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
webView = (WebView) findViewById(R.id.myWebView);
WebSettings webSettings = webView.getSettings();//获取设置对象
webSettings.setJavaScriptEnabled(true);//WebView默认是不支持javascript的
webView.addJavascriptInterface(new MyObject(), "demo");
webView.loadUrl("file:///android_asset/test.html");
}
Handler handler = new Handler();
public class MyObject{
@JavascriptInterface
public void clickOnAndroid(){
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
webView.loadUrl("javascript:myFun()");
}
});
}
}
}
上面的test.html
<html>
<head>
<title>demo</title>
<script type="text/javascript">
//这里面的代码表示如果浏览器支持就执行
function myFun() {
document.getElementById("droid").src = "b.jpg";
}
</script>
</head>
<body>
<a onclick="window.demo.clickOnAndroid()">
<img id="droid" src="a.jpg" width="400" height="500"/>
</a>
</body>
</html>