小编一直任务将web和android组件结合起来做应用可以事半功倍,html5一来就更有说服力了,特别是对于以前从事web开发的兄弟来说
1. webview加入布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/allPage"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</WebView>
</RelativeLayout>
2. 重写WebChromeClient或webClient,主要是针对提示框和返回键
public class WebBrowserClient extends WebChromeClient {
String title = Constants.appname;
@Override
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
}
@Override
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
return super.onCreateWindow(view, dialog, userGesture, resultMsg);
}
/**
* 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////”
*/
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(title).setMessage(message).setPositiveButton("确定", null);
// 不需要绑定按键事件
// 屏蔽keycode等于84之类的按键
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsAlert", "keyCode==" + keyCode + "event="+ event);
return true;
}
});
// 禁止响应按back键的事件
builder.setCancelable(true);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
return true;
// return super.onJsAlert(view, url, message, result);
}
3. HTML页面里面的定义:
function gopage(url){
window.androidMain.loadURL(url);
}
4. Activity里面的使用
// 初始化WEB页面
private void setupViews() {
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setVerticalScrollBarEnabled(true);
mWebView.setScrollbarFadingEnabled(true);
mWebView.setWebChromeClient(new WebBrowserClient());
mWebView.setInitialScale(1);
mWebView.setLongClickable(false);
WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setJavaScriptEnabled(true);
mWebSettings.setUseWideViewPort(true);
mWebSettings.setLoadWithOverviewMode(true);
mWebSettings.setUseWideViewPort(true);
// 支持多点触控缩放
mWebSettings.setSupportZoom(false);
mWebSettings.setBuiltInZoomControls(false);
// 使用缓冲
mWebSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
mWebView.loadUrl("file:///android_asset/b.html");
ObjectClassHere cc = new ObjectClassHere();
mWebView.addJavascriptInterface(cc, "androidMain");
}
class ObjectClassHere {
public void exitSystem(){
finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
public void loadURL(String url){
String furl = "file:///android_asset/" + url;
mWebView.loadUrl(furl);
}
public void showChaPinAdvs(int cr){
Log.v(tag, "111 showChaPinAdvs currLevel="+cr % 2);
if((cr % 2) == 0){
showadvs = true;
SpotManager.getInstance(context).showSpotAds(context);
}
}
5. web页面的开发周期和效果都要较activity快速,但目前的效果相对一般,有待改进
使用场景有很多,比如吹泡泡【http://zhushou.360.cn/detail/index/soft_id/341284】,泡泡的动画用activity很难实现,但是用html+js就比较容易一些,结合activtiy对话筒的控制就可以做出来了。