安卓WebView介绍

          在安卓手机中,内置了一款高性能的webkit浏览器,在SDK中封装成了WebView组建,可以加载html页面。那么WebView是如何使html与安卓进行交互的呢?也就是说,安卓可以调用html中的函数,html也可以调用安卓的函数;前提是我们对安卓,html,js,jquery都比较熟悉;

       一.先上效果图,知道是怎么回事:

        1.第一副图中有两个按钮,第一个是html中的按钮,第二个是安卓中的按钮

       

       2.当点击了第一个按钮时,html调用安卓中的函数,安卓中的函数返回值为1,将返回值写入html中 , 如下图所示

        

       3. 当点击了第二个按钮时,安卓代码调用了html中的函数,并传递了一个参数1,传递过来之后,将参数写入html中 , 如下图所示

         



       二.注意事项:

          1.html文件应该放在assets文件夹里面

          

            2.在AndroidManifest.xml文件必须加上

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

              否则会报Web page not available错误

            3.mWebView.getSettings().setJavaScriptEnabled(true),必不可少;

            4.如果你的安卓版本level大于等于17时,必须要在安卓被调用的函数前面写注解:

               @JavascriptInterface

       三.html代码:

<span style="font-size:12px;color:#000000;"><!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>
</head>
   <script>
        function fun(){
           document.getElementById("p").innerHTML = window.demo.one();//调用安卓函数,并返回1
        }
        
        function wave(){//被安卓函数调用
             document.getElementById("p1").innerHTML = 2;
        }
   </script>
   <body>
            <p id="p"></p>
	    <button οnclick="fun()">js调用安卓函数</button><!--第一个按钮-->
	    </br>
	    <p id="p1"></p>
    </body>
</html></span>

     四.安卓布局文件:
<span style="font-size:12px;color:#000000;"><?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >    
    <WebView   
        android:id="@+id/webview" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
    /> 
   <Button //第二个按钮
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="安卓调用js函数"
   >
   </Button>
</LinearLayout> 

</span>
   五.安卓代码:
  {
    <span style="font-size:12px;color:#000000;">WebView mWebView = null;
	Button button = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mWebView = (WebView)findViewById(R.id.webview);
		button = (Button)findViewById(R.id.btn);
		button.setOnClickListener(new OnClickListener() {		
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				<span style="color:#6633FF;">mWebView.loadUrl("javascript:wave()");/</span>/<span style="color:#6633FF;">安卓调用html中的函数</span>
			}
		});
		<span style="color:#3366FF;">//设置webview能够执行javascript语句;</span>
		mWebView.getSettings().setJavaScriptEnabled(true);
		
		<span style="color:#3333FF;"><span style="background-color: rgb(255, 255, 255);">//给js要调用的函数创建一个对象,并设置一个别名;</span></span>
		mWebView.addJavascriptInterface(new ProxyBridge(), "demo");
		
		mWebView.loadUrl("file:///android_asset/index.html");
		<span style="color:#3333FF;">//webView响应超链接:点击超链接之后会在同一个浏览器页面显示,而不是从新打开一个浏览器;</span>
		mWebView.setWebViewClient(new HelloWebViewClient ());
	}
	<span style="color:#3366FF;">//如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,
	//如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
	@Override</span>
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()){
			mWebView.goBack();
			return true;
		}
		return false;
	}
	
	public class HelloWebViewClient extends WebViewClient{
		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			// TODO Auto-generated method stub
			view.loadUrl(url);
			return super.shouldOverrideUrlLoading(view, url);
		}
	}
	<span style="color:#000099;">public final class ProxyBridge{
		@JavascriptInterface//安卓版本过高的话一定要加此注解
		public int one(){</span></span><span style="font-size:12px;color:#000000;"><span style="color:#000099;">//被html调用的安卓函数</span></span>
	    <span style="font-size:12px;">  return 1; 
	    }
	}</span>



           

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值