Android WebView与混合应用
背景
现在不少应用软件需要多平台,为了方便维护,很多都是混合开发模式,即主要业务逻辑是在web服务器上的,应用也是用js写的网页,手机上只是一个提供些许特殊功能的浏览器。
Android View使用
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context="${relativePackage}.${activityClass}" > <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/WebViewMain" /> </RelativeLayout>
布局的要求就是几乎是全屏显示浏览的内容,让用户仿佛在使用一个安卓的原生程序
在Activity的onCreate方法上要为WebView稍微设置一下
WebView webView=(WebView)findViewById(R.id.WebViewMain); webView.getSettings().setJavaScriptEnabled(true); //支持JavaScript webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);//关闭缓存 webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//不加上,会显示白边 webView.loadUrl("http://www.helloclyde.com.cn/JQuery-Demo/");//添加需要显示的URL
与JS交互
像上面写完的代码只是一个全屏的浏览器而已,为了实现某些特殊的功能比如调用摄像头和程序退出,我们需要安卓内的JAVA代码能和网页的js代码互动
先写一个js调用安卓方法的例子
在WebView.loadUrl方法前要先传递java对象,比如
webView.addJavascriptInterface(this, "MainActivity");
我把Activity对象传递到了JS接口中,并且把它命名为MainActivity在JS中要这么调用
javascript:window.MainActivity.Exit()
这样的话JS就调用了传递过去的MainActivity对象的Exit方法,注意这个方法要为public。
其他注意点:
在Android SDK 17以及以上的版本会屏蔽
方法,所以要把目标SDK版本设置成16webView.addJavascriptInterface
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />