Android WebView 食用指南

WebView是Android的浏览器控件,内置强大的webkit引擎,支持Html5,通过它得以实现java和js互相调用。

一 、权限配置

需要在Android Manifest文件里配置internet访问权限,否则无法访问页面。

<uses-permission
 android:name="android.permission.INTERNET"
/>

二、生成WebView组件

两种方式:

  1. 直接在Activity的onCreate方法里new一个
WebView webView = new WebView(this);
  1. 在Activity的layout文件里添加WebView控件
<WebView
	android:id="@+id/myWebView"
	android:layout_width="match_parent"
	android:layout_height="match_parent" />

然后在onCreate方法里

WebView myWebView = (WebView)findViewById(R.id.myWebView);

三、配置WebView

Android使用WebSettings来配置WebView,常用的有

  1. 设置文本的默认编码。
myWebView.getSettings().setDefaultTextEncodingName("UTF-8");
  1. 开启JavaScript支持。
myWebView.getSettings().setJavaScriptEnabled(true);

四、加载html页面

  1. 加载本地assets目录下的welcome.html。
myWebView.loadUrl("file://android_asset/welcome.html");
  1. 加载本地sd卡内的welcome.html。
myWebView.loadUrl("content://com.android.htmlfileprovider/sdcard/welcome.html");
  1. 加载指定网址的html页面。
myWebView.loadUrl("https://www.gameres.com/");

四、定制和响应WebView的行为

Android通过设置自己的WebViewClient代理对象,在对象中覆盖默认的操作方法,来实现对WebView行为的定制和响应。比如

myWebView.setWebViewClient(new WebViewClient() {  

	// 默认当前页面链接的跳转是通过手机浏览器打开的,如果希望当前链接仍然在WebView里跳转则要覆盖实现这个方法并return true
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    	// 还可以对url进行一些处理,比如屏蔽某些链接或者打开新的链接
        view.loadUrl(url);  
        return true;  
    }

	@Override
	public void onPageStarted(WebView view, String url, Bitmap favicon) {
		setTitle("页面开始加载"); 
	} 

	// 响应页面加载进度
	@Override
   public void onProgressChanged(WebView view, int progress) {  
        setTitle("页面加载中" + progress + "%");  
        setProgress(progress * 100);  
        
        if (progress == 100) {  
            setTitle("加载完成");  
        }  
    }

	@Override
	public void onPageFinished(WebView view, String url){
		setTitle("页面完成加载"); 
	}

	// 默认WebView是不处理https请求,跳转链接后会出来一个空白的页面
	@Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {  
        handler.proceed(); // 如果需要WebView处理https请求则这样调用
		// handler.cancel(); // 默认行为,不处理https请求
		// handler.handleMessage(null); // 执行其他处理
    }

	@Override
    public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
		//message就是alert函数的字符串,这样我们就可以在这获得从网页里传送过来的参数,并且还可以在这定制一个自己的Alert UI
        result.confirm();
 		return true; 
    }     
});  

还有就是默认点Android的Back键会直接关闭WebView所在的Activity,通常这时我们希望WebView翻页回退,这就需要重载Activity的onKeyDown方法对back键特殊处理。

public boolean onKeyDown(int keyCode,KeyEvent event){
	if(myWebView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK){
	    myWebview.goBack();   // goBack()表示返回WebView的上一页
	    return true;
	}
	
	return false;
}

五、Android上Java和JS互相调用

要实现Android上Java和JavaScript互相调用,首先要给WebView绑定html页面操作的Java对象,如下:

myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new JavaClassObject(), "javaobj");
myWebView.requestFocus();

其中javaobj是在html里绑定对象的变量名。

  • 接着使用WebView的loadUrl("javascript:javascript方法名(参数)")方法在Handler里调用以保证loadUrl在主线程里执行,从而实现Java调JS。
public class JavaClassObject {
	private Handler handler;
	private WebView myWebView;

	public void callByJavaScript(String param1) {
		handler.post(new Runnable() {
			public void run() {
				myWebView.loadUrl("javascript:callByJava('" + param1 + "')");
			}
		});
	}
}

另外还可以使用loadUrl("javascript:javascript语句")直接执行javacript语句,就像在html上下文里调用一样。

  • 而JS调用Java则要通过在html页面里的script语句块中执行绑定的Java对象变量名.Java方法名来实现。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jquery.js"></script>
<script>
	function callJava() {
	    var stringParam = $("#cj").val();
		window.javaobj.callByJavaScript(stringParam);    
	}
    
    function callByJava(javaParam) {
       //alert(javaParam.name);
       $("#javaParam").text(javaParam.name);
    }
</script>
</head>
    <body>这是一个html页面<br/>
 	请输入一个字符串参数:<br/>
  	<input id="cj" />
        <input type="submit" value="调用绑定Java对象的Java方法" onclick="callJava();"/><br/>
        从Java传递过来的参数:<label id="javaParam"></label>
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值