一.在开发中对于经常需要改动的页面,我们会把它做成H5页面,在APP中以WebView的形式加载。这样就避免了Native原生页面每次修改。
H5的好处是开发周期相对于原生页面要短,其缺点就是加载速度相对于原生的要慢。
H5页面在android中生成的步骤为:
1.从服务器端动态获取数据并拼接成一个HTML;
2.服务器返回给客户端WebView;
3.在WebView中解析并生成这个HTML。
实际项目中对于一些界面可做两套界面,原生的一套和H5的一套这样可以适应一些急于改变的需求。
实现方式可以:
1.需要做一个后台,根据版本进行配置每个界面是使用原生还是H5页面的;
2.在启动app时,从后台协议中获取对应使用的原生的还是H5的;
3.在代码中页面间要实现松耦合。
二.android与H5之间的互相调用原理:
1.实现android操作H5页面:
我的实现是点击button改变webview的背景颜色,相当于点击button传递参数到H5中function方法进行颜色的设置:
H5的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="{CHARSET}">
<title>java调H5</title>
</head>
<body>
<script type="text/javascript">
function changeColor (color){
document.body.style.backgroundColor=color;
}
</script>
<script type="text/javascript">
document.write("androidcallH5")
</script>
</body>
</html>
android中的代码实现为:
mWv.getSettings().setJavaScriptEnabled(true); //开启JavaScript的使能
mWv.loadUrl("file:///android_asset/JavaCallH5.html"); //通过loadUrl加载html页面
case R.id.btn1:
{
String color="#00ee00";
mWv.loadUrl("javascript:changeColor('"+color+"');"); //loadUrl里面加上javascript的function+所传的参数值
}
break;
2.H5调用android中的方法并传递参数:
使用到的是addJavascriptInterface这个方法:
具体这个方法的源码中有这样一个例子
class JsObject {
{@literal @}JavascriptInterface
public String toString() { return "injectedObject"; }
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
方法中的参数解释如下:
@param object the Java object to inject into this WebView's JavaScript
context. Null values are ignored.
@param name the name used to expose the object in JavaScript
public void addJavascriptInterface(Object object, String name) { //object是自己所创建的类,name是H5中所设置的function的别名
checkThread();
mProvider.addJavascriptInterface(object, name);
}