WebView的介绍

前言

好久没在CSDN写博客了,最近有时间把一些之前项目期总结的东西,传上来给大家分享,这是本人花了3天独自翻译的.希望能够帮助,同时也希望大家可以指明错误.博主会更努力,那下面紧接着是WebView的一个小翻译系列.

导航

WebView的介绍
http://blog.csdn.net/l540675759/article/details/54709676

WebView翻译的API大全
http://blog.csdn.net/l540675759/article/details/54709664

WebView设置之WebViewClient
http://blog.csdn.net/l540675759/article/details/54709687

WebView设置之WebChromeClient
http://blog.csdn.net/l540675759/article/details/54709680

WebView设置之WebSettings
http://blog.csdn.net/l540675759/article/details/54709690

WebView介绍

WebView的使用简介

==WebView 在使用的时候,主要设置三大部分内容:==

(1)WebChromeClient

得到浏览器内部的反馈,包括加载情况以及对JavaScript的反馈.

(2)WebViewClient

设置加载Web内容的相关,包括展示错误的反馈.

(3)WebSetting

WebView的内部设置,可以设置其和JavaScript的交互.

==WebView 进行变焦(放大,缩小)设置==

开启方法:

webview.setBuiltInZoomControls(boolean)

注意:在布局自适应的情况下,可能会出现加载问题.

WebView的痕迹(记录)管理,以及窗口管理

(1)WebView的痕迹,使用附属Application的缓存,并且App的数据不会浏览器共享.

(2)Activity转屏或者会影响转屏的操作,都会使WebView重新加载之前的界面,如果不希望看到这样,那么请在清单文件中,对Activity进行设置.

构建WebView页面来支持不同的屏幕密度

对于不同的硬件,低密度意味着手机本身可使用的屏幕区域少,而高密度意味着手机可使用的屏幕区域大.

(1)WebView默认展示的是中等密度,它在1.5x和0.75x的屏幕密度下可以良好的展示.

(2)WebView支持CSS,DOM,以及各种(前端)网页标签.

==处理不同的屏幕密度的方法==

  • [x] DOM的权重比
  • Window.devicePixelRatio
  • 默认情况下这个值为1.(在这个值的状况下,属于标准情况,不会放大也不会缩小).
  • (高屏幕密度)1.5x情况下,意味着显示内容是按比例扩大1.5倍.
  • (低屏幕密度)0.75x情况下,意味着显示内容是按比例缩小0.75倍.

  • [x] CSS相关的权重比,可以直接指定

  • -webkit-device-pixel-ratio
  • 对应高、中、低屏幕密度分别对应的值为1.5,1,0.75.
  • eg
<link rel="stylesheet" media="screen" and  (-webkit-device-pixel-ratio : 1.5)" herf = "hdpi.css"/>
HTML5 Video Support

==为了支持HTML5视频内链在应用中,需要进行硬件加速。==

充满屏幕设置

WebChromeClient:

  • [x] onShowCustomView(View, CustomViewCallBack)
  • 当HTML5播放器需要进行全屏播放操作,然后需要先将webView从视图移除,然后加载(需要显示的Video或者其他的)View组件。

  • [x] onHideCustomView()

  • 此时需要将正在全屏播放的View隐藏掉,并且加载WebView组件。

  • [x] getVideoLoadingprogress()

  • 设置HTML5视频播放器播放第一帧之前的加载动画。
支持HTML5的定位请求

如果需要进行定位请求,安卓的SDK版本必须大于N包,并且如果必须使用Https,如果一些应用使用http进行定位请求,那么会弹出不安全提示,并且需要用户下放权限。

使用WebView布局相关

(1)使用WebView时,建议使用MATCH_PARENT或者固定值来代替WRAP_CONTENT防止显示时,布局出现问题。

设置成“WRAP_CONTENT“会有以下行为:

(1)如果HTML元素被设置成固定值,那么将意味着HTML的元素显示会有问题。

(2)在Android KitKat版本HTML的标签被忽略,为了更好的向后兼容,所以WebView不支持WRAP_CONTENT,如果使用该标签,那么会使用父布局的宽高尺寸。

用户隐私

默认情况下,谷歌会私自上传WebView的崩溃日志,用来帮助谷歌更改的对WebView进行改善,但是设置

<meta-data 
android:name ="android.webkit.webview.MetricsOptout"
android:value ="true"/>
WebView加载网页基本用法

webview是android中的浏览器控件,在一些手机应用中常会用到b/s模式去开发应用,这时webview的强大功能就会显示出来。

1、webview的几点设置

==权限设置:==

AndroidManifest.xml中必须使用许可”android.permission.INTERNET”,否则会出Web page not available错误.

==js开放设置:==

如果访问的页面中有Javascript,则webview必须设置支持Javascript。webview.getSettings().setJavaScriptEnabled(true); 否则,页面的js将不会起作用.

==滚动条设置:==

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

==设置缓存模式:==

setCacheMode

==要注意的是,其中的webView的一系列用法,比如==

webView.getSettings().setJavaScriptEnabled(true);设置可以使用javscript;
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setHorizontalScrollBarEnabled(false);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setInitialScale(70);
webView.setHorizontalScrollbarOverlay(true);
返回处理

如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。

public boolean onKeyDown(int keyCode, KeyEvent event) {
  if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) 
{
  mWebView.goBack();
  return true;
  }
  return super.onKeyDown(keyCode, event);
  }
支持javascripte自定义对象

可以通过addJavascriptInterface()方法,添加js自定义对象,使用web页面与手机java程序能够进行通信交互。
  

DownloadListener接口

该接口里面有一个方法,onDownloadStart()下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下,DownloadManagerCore对象会调用客户代码中实现的DownloadListener方法。
  

几个注意点

1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,==前缀为”file:///android_asset/”。WebView遇到这样的schema,就去当前包中的 assets目录中找内容==。如上面的”file:///android_asset/demo.html”

2)==addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的==(今天我是在没有在handler中处理,所以导致webviewclient中的onPageStart方法与addJavascriptInterface中的方法起了冲突,二个人的执行顺序时常互换,之后改成handlder实现,就解决其中的问题,正确的顺序是onPageStart在addJavascriptInterface中的handlder事件处理之前执行)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值