WebView是常用的一个控件,下面总结WebView的常用用法。
1,设置WebView要显示的页面:
互联网用:webView.loadUrl("http://www.google.com"); 注意:要写上协议头,不能简单的写成“www.google.com” .否则访问不到。
本地文件用:webView.loadUrl("file:///android_asset/help.html"); 本地文件存放在:assets文件中
2,默认情况,如果显示本地页面(如果是TAB选项卡,页面显示在该程序窗口),点击页面中的链接,会打开浏览器窗口。
如果是互联网页面,(如果是TAB选项卡,页面显示在浏览器窗口)。点击页面中的链接,会打开浏览器窗口。
也就是说,默认点击链接或WebView是由Android系统的Browser来响应的。但这样就显得在访问浏览器而不是我们的程序。可以做如下设置:
webView = (WebView) findViewById(R.id.webView_help); // webView.loadUrl("file:///android_asset/help.html"); webView.loadUrl("http://www.hao123.com"); webView.setWebViewClient(new WebViewClient() { /*shouldOverrideUrlLoading方法指明了在loadUrl的时候,程序应该有怎样的行为。 如果是返回false,则url由当前的webview载入, 如果是true,则交给当前程序来决定如何处理。*/ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); // return false 都可以得到自己处理链接响应的问题 // return true;//则交给当前程序来处理,但是当前程序没有处理,所有页面不会显示。 } });
注意:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
3,设置WebView基本信息
1) 设置触摸焦点起作用
webView.requestFocus(); (此方法还没测试成功,不太清楚具体用法)
如果不设置,则点击网页输入框时,不能弹出软键盘,也不响应其他事件
2) 设置取消滚动条
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
4,WebView 交互 JS
Webview与js的双向交互才是android的webview强大所在,也是马甲精神能够彻底执行的基础保障。
webView.getSettings().setJavaScriptEnable(true);
代码如下:
<html> <head> <script language="JavaScript"> function changeUsername(){ document.all.username.value="android"; } function callAndroid(){ var mobile = document.all.tellphone.value; document.all.username.value = "mobile"; androidPhoneObject.call(mobile); } </script> </head> <body> username <input id="username"><br> tellPhone <input id="tellphone"><br> <input type="button" value="Test fun" onClick="changeUsername();"> <input type="button" value="call Phone" onClick="callAndroid();"> <h1><a href="http://www.hao123.com/">好123</a> </h1> </body> </html>
点击 按钮Test fun ,能执行js脚步,如不设置,则不起作用。
2)Android代码访问Js脚步
// 在android中单击这个button调用网页中的javaScript btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { webView.loadUrl("javascript:changeUsername();"); } });
3)Js脚步中调用Android代码
// 让javaScript 访问android的功能 Phone phone = new Phone(); // 向javaScript公开phone的功能 webView.addJavascriptInterface(phone, "androidPhoneObject"); // 上面定义的androidPhoneObject对象将来在js脚步中使用 //下面是打电话的操作方法 final class Phone { public void call(String mobile) { Uri uri = Uri.parse("tel:" + mobile); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent); } }
5,如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。
覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) { webView.goBack();//返回webView的上一页 return true; } return false; }
参考资料:http://blog.csdn.net/chenshijun0101/article/details/7045394