android webview 全解

本文介绍了WebView的基本用法及高级技巧,包括加载网页、设置缓存模式、处理JavaScript对话框、加载资源响应、页面加载开始和结束响应等。同时,还探讨了WebView在Android应用中的优势及其在混合型App中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     就目前而言,如何应对版本的频繁更新呢?又如何灵活多变的展示我们的界面呢?这又涉及到了web app与native app之间的孰优孰劣的争论。我认为分不出个123来,未来一定是混合型app的世界。如淘宝商城首页的活动页面,京东商城里,我们都可以见到web页与native页的混合,即利用了web app的灵活易更新,也借助了native本身的效率。最近我们的项目里也是出现了大量的web页。所以我把webview的使用与在使用过程中遇到的问题拿出来大家一起分享下。

1,简单用法

      网络用:

   webView.loadUrl("http://www.baidu.com");

      本地文件用:

   webView.loadUrl(file:///android_asset/XXX.html);
      这里的格式是固定的,文件位置 assets目录下, 这样,就能加载一个网页了。


2,当然,我们并不仅限于它的简单使用。如果访问的页面中有javaScript,则webview必须设置支持JavaScript

   webView.getSettings().setJavaScriptEnabled(true);

3,缓存的使用

   //优先使用缓存
   webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
   //不使用缓存
   webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
     如果webview变化大的话建议不用缓存,以防状态改变,没有刷新界面。


4,设置WebView可触摸放大缩小:

   webview.getSettings().setBuiltInZoomControls(true);


 5,WebView双击变大,再双击后变小,当手动放大后,双击可以恢复到原始大小,如下设置:

   webView.getSettings().setUseWideViewPort(true);

6,在程序内打开网页

webView.setWebViewClient(new WebViewClient() {
   @Override
   public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    view.setVisibility(View.GONE);

    //在这里我们可以设置一下加载网页失败时的提示
    Toast.makeText(Activity.this, "网络服务不可用", Toast.LENGTH_SHORT).show();

   }

  @Override
public booleanshouldOverrideUrlLoading(WebView view, String url){

Toast.makeText(getApplicationContext(),"WebViewClient.shouldOverrideUrlLoading", Toast.LENGTH_SHORT).show();
//使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面
view.load(url);
//记得消耗掉这个事件。给不知道的朋友再解释一下,Android中返回True的意思就是到此为止吧,事件就会不会冒泡传递了,
我们称之为消耗掉

//在这里我们就可以对url进行截取,判断,来与网页交互。例如点击网页上的button跳转本地页面
return true;
}




       onLoadResource:加载资源时响应
  onPageStart:在加载页面时响应
  onPageFinish:在加载页面结束时响应

  onReceiveError:在加载出错时响应

了解了这些,我们就可以在特定的时间段里做特定的事情了。


7,WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如            onCloseWindow(关闭WebView)
    onCreateWindow()
   onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
   onJsPrompt
   onJsConfirm
   onProgressChanged
   onReceivedIcon
   onReceivedTitle

看上去它和webviewClient有很多不同,实际使用的话,如果你的WebView只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient。


8,post方式传递数据

      String postData = "clientID = cid & username = name";                      webview.postUrl(url, EncodingUtils.getBytes(postData, "base64"));


9,按返回键时, 不退出程序而是返回上一浏览页面:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值