`

Android WebView 用法说明

 
阅读更多

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics