Android WebView初识

 前言

  《黑客与画家》的第五章标题为“另一条路--互联网软件是微机诞生后的最大机会”。书中提到未来的科技蓝图:“当网速足够快,服务端技术足够牛逼,那么电脑上只需要操作系统+浏览器+网卡就可以了。当需要使用QQ时,只需要打开浏览器,点击QQ图标,在0.1秒的时间内完成历史记录的加载,然后和狐朋狗友吹完牛逼,关闭软件,所有的数据又在0.1s内回传到服务端保存。”那时,对电脑的硬件要求会很低,也省去了软件的安装过程,用户再也不用担心被黑客攻击了。
  手机不就是“微机”的典型吗?而且手机还具有可方便携带的显著优点,你下班之后可能不会再开电脑,但你一定会使用手机。 在手机浏览器完成大一统,代替手机桌面之前,在App里内嵌浏览器不失为一种折中的选择。而在Android和IOS系统中,都有一种内嵌的浏览器组件--WebView。
  下面就围绕着Android中,WebView是什么?为什么要用它?怎么使用它?三个问题展开阐述。
   

1.WebView是什么?

  Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。所以,大可把WebView看作一个可以嵌入到App中的浏览器,它继承于绝对布局AbsoluteLayout,所以它的本质就是一个带有浏览器功能的组件。

2.为什么要用WebView?

  1. 节省开发成本:一般来说,一个应用都会有Android和IOS两端。所以同一个界面,就会有两次实现;而使用了WebView之后,只需要实现一次Web页面,Android和IOS都可以通过WebView来加载Web页面。
  2. 方便版本控制:传统的应用,在发布版本以后修复的Bug和用户反馈问题的解决,只能积压到下一个版本才能让用户使用;而使用WebView,只需要重新部署Web资源,用户就能使用最新的功能,就像网页一样。
  3. 易于试错:对于一些创业公司来说,开发出最小可行性产品用于初期的推广是一个明智之选,那WebView无疑是很好的选择,它的灵活性,能很方便地表达出创业者的意愿,当市场和预期不一样时,可以及时做出调整。能让创业者把更多的心思花在市场的反馈,而不是技术的实现。
  4. 技术平台的衔接:C/S到B/S的转型,是大势所趋,特别是Html5的兴起,只会Android开发的程序猿已经不能“高枕无忧”了,还是要与时俱进,学习前端、后台。

3.怎么用WebView?

3.1 增加权限

  WebView是用来加载网页的控件,那么肯定要在AndroidManifest.xml增加访问网络的权限。   
     <uses-permission android:name="android.permission.INTERNET"/>

3.2 增加WebView控件

  WebView继承于相对布局,那增加WebView控件就有两种方式,第一种,在layout布局定义WebView;第二种,在Java代码里动态创建出来。下面是两种方式的实现:
  1)layout中定义WebView,像普通控件一样,在Java代码里通过findViewById()方法得到WebView。
     <WebView
         android:id="@+id/mywebview"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
  2)代码动态创建WebView,然后把创建的WebView对象,设置成当前视图
      WebView myWebView = new WebView(MainActivity.this);
      setContentView(myWebView);

3.3 加载网页

  在得到WebView控件之后 ,可以通过loadUrl方法把网页加载到应用程序中,这里不需要自己去创建子线程。
      String url = "http://www.baidu.com/";
      myWebView.loadUrl(url);
  下面是加载百度首页的效果图:
  这样就能在你的应用程序里嵌入一个浏览器了, 是不是很简单啊!
3.4 使用WebViewClient
  通过上面的gif图可看出,当用户启动了程序以后,加载完主界面,然后打开了一个浏览器界面,覆盖了主界面,所以当点击返回键的时候,是销毁了浏览器界面,到达主界面,当再次点击返回按钮时,才能真正退出程序。那怎么才能在当前的WebView上加载网页呢?这就需要用到WebViewClient了,为WebView对象设置WebViewClient的匿名内部类对象,并重写shouldOverrideUrlLoading(WebView view, String url)  方法,让其返回值为true,则表明使用的是WebView去加载Url。
  具体代码如下:
myWebView.setWebViewClient(new WebViewClient(){

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
    //注意,这里的view和url都是shouldOverrideUrlLoading方法的参数
    view.loadUrl(url);
    return true;
   }
   
  });
 在当前主页面加载网页,当点击一次返回键,便退出程序。效果图如下:
3.5 回退键的监听
  用户在WebView上的网页进行了多次操作以后,当点物理返回键时,是返回到上个网页?还是返回到上个Activity(这里只有1个Actiivty,即退出)?
 答案是后者,直接退出程序?如下左图所示。但点击了返回键时,返回到上个浏览的网页,更为合理,那怎么才能显示,达到右图的效果呢?
 
  这里只需要对物理返回键监听方法,进行重写,当按物理返回键时,以返回网页优先,当没有可返回的网页时,再返回Activity。代码如下图所示:
@Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  if(keyCode == KeyEvent.KEYCODE_BACK){
   if(myWebView.canGoBack()){
    //如果当前网页能够回退,则回退到上级网页
    myWebView.goBack();
    return true;
   }else{
    //如果当前网页不能回退,则回退到上个Activity
    finish();
   }
  }
  return super.onKeyDown(keyCode, event);
 }
  这只是一篇简单的WebView的使用,后续会继续写关于WebView与Js的交互以及WebView适配问题的博客。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值