Android-WebView基本使用

小编一直任务将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对话筒的控制就可以做出来了。

技术分享


 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。