WebView是一个展示网页内容的组件。它可以显示网络上的一些在线内容,可以作为网络浏览器的滚动显示内容。它使用WebKit作为渲染引擎来显示网页,其中包括通过放大、缩小、执行文本搜索等方式向前和向后导航的方式。注意:如果要在WebView中显示在线网页等内容,需要在AndroidManifest.xml文件中添加网络权限,如下:Basic默认情况下WebView不启用JavaScript,网页错误将被忽略。如果只是在UI上显示一段HTML,这样就很好了。用户在阅读之前与用户进行交互。网页不需要与用户交互。如果需要一个完整的浏览器,需要调用相应的Intent来启动浏览器进行某些操作,而不是使用WebView来显示,使用如下代码调用系统浏览器:uriuri=Uri.parse("https://www.example.com");Intentintent=newIntent(Intent.ACTION_VIEW,uri);startActivity(intent);WebView的使用方式主要有两种,直接在Activity等onCreate()方法中创建使用或者在布局文件中引入。参考如下:1.在代码中直接创建WebViewWebViewwebview=newWebView(this);//这里整个Activity窗口作为WebView的显示界面,也可以单独放在一个layout中setContentView(网络视图);2.在布局文件中使用WebView那么,我们如何加载一个网页,如果网页是本地的怎么加载,怎么加载一段HTML,常用的加载方式有两种,如下:1.加载一个完整的网页。这里的测试使用百度首页、CSDN首页、腾讯首页进行测试,测试百度首页,需要设置如下属性才能正确显示网页。如果不设置,会显示为白屏:webSettings.setJavaScriptEna流血(真);webSettings.setDomStorageEnabled(真);webView.loadUrl(“https://www.baidu.com”);测试CSDN主页时,会提示用浏览器打开系统应用打开页面,设置如下属性直接加载网页内容:webView.setWebViewClient(newWebViewClient());webView.loadUrl("http://blog.csdn.net");测试腾讯首页时,直接加载首页内容即可:webView.loadUrl("http://www.qq.com");测试环境可能不同,结果也不同2.加载本地HTML文件。加载SD卡上的HTML文件时,需要申请访问SD卡的权限。Manifest.permission.WRITE_EXTERNAL_STORAGE,参考如下://加载assets目录下的html文件webView.loadUrl("file://android_asset/mine.html");//加载SD卡webView上的html文件.loadUrl("file:///"+Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"mine.html");3.加载HTML片段加载HTML片段时,设置字符集,否则会出现乱码,参考如下://加载HTML片段,设置字符集,防止出现乱码webView.loadData(Util.getHtmlData()"text/html;charset=UTF-8",null);WebView设置和界面处理主要包括以下几个方面:创建并设置WebChromeClient,主要是辅助WebView处理JavaScript对话框、网站标题、加载进度等;createandsetWebViewClient主要提供各种事件的回调;通过WebSetting对象,可以设置WebView的各种相关属性,比如支持JavaScript,设置WebView缓存,字体大小等;JS和Java之间相互调用,比如使用addJavascriptInterface(Object,String)方法将一个Java对象注入到WebView中。此方法允许您将Java对象注入到页面的JavaScript上下文中,以便页面中的JavaScript可以访问它们。缩放Android1.5支持调用如下方法启用内置缩放:WebSettings.setBuiltInZoomControls(boolean)注意:如果设置了内置缩放,并且WebView的宽高为wrap_content,会导致undefinedbehavior,应该使用时应避免。构建网页以支持不同的屏幕密度。屏幕密度基于屏幕分辨率。低密度屏幕的每英寸像素数较少,而高密度屏幕的每英寸像素数较多。屏幕密度更重要,因为其他因素相同。在这种情况下,根据像素定义的UI元素在低密度屏幕上显示较大,在屏幕密度较高的屏幕上显示较小;为了方便Android,将实际屏幕密度转换为更大范围的屏幕密度:High、Medium和Low。默认情况下,WebView缩放网页,以便它们以与中密度屏幕上的默认外观相匹配的大小绘制,因此1.5倍缩放(较小的像素)适用于高密度屏幕和低密度屏幕0.75倍缩放(更大的像素);从Android2.0开始,WebView支持DOM、CSS和meta标签,帮助Web开发者根据不同的屏幕密度适配目标屏幕。以下是处理不同屏幕密度的一些说明:使用window.devicePixelRatio属性指定当前设备的默认比例因子,这也指设备上的物理像素与设备无关像素(dips)的比率,如果window.devicePixelRatio值为1表示该设备被视为中等密度(mdpi)设备,默认缩放比例不适用于网页。如果window.devicePixelRatio值是原始值的1.5倍,则该设备被认为是高密度设备(hdpi)。内容缩放到1.5 倍;如果window.devicePixelRatio值为0.75,该设备被认为是低密度设备(ldpi),内容被缩放到0.75倍,表示如下:window.devicePixelRatio(dpr)=physicalpixel/dips(csspixel)}physicalpixel=dips*density/160}(Android)使用-webkit-device-pixel-ratioCSSmediaquery来指定使用这个样式表的屏幕密度,它的值应该是0.75,1,1.5,表示这些样式sheet分别适用于低密度、中密度、高密度的屏幕设备,比如下面声明hdpi.css只适用于屏幕像素密度比为1.5的屏幕设备,即针对高密度屏幕设备。HTML5视频支持如果支持HTML视频,需要开启硬件加速应用。硬件加速可以参考:Android硬件加速全屏支持为了支持全屏,比如视频或者其他HTML内容,需要设置一个WebChromeClient,实现两个方法:onShowCustomView(View,WebChromeClient.CustomViewCallback)和onHideCustomView():1、onShowCustomView通知应用程序当前页面进入全屏模式,应用程序将在全屏模式下包含Web内容、视频和其他HTML内容。/***@paramview显示的视图。*@paramcallback调用当前页面退出当前页面*全屏模式。*/publicvoidonShowCustomView(Viewview,WebChromeClient.CustomViewCallbackcallback){};2。onHideCustomView通知应用程序当前页面退出全屏模式时,应用程序必须隐藏自定义View。publicvoidonHideCustomView(){}如果这两个方法中的任何一个没有实现,相应的网页就不能进入全屏模式,也可以实现getVideoLoadingProgressView()来自定义视频缓冲时显示的视图。publicViewgetVideoLoadingProgressView(){returnnull;}HTML5地理位置API针对AndroidN和APIlevel>M的设备,地理位置API只支持HTTPs。如果应用程序以非HTTPS方式请求地理位置API,onGeolocationPermissionsShowPrompt(String,GeolocationPermissions.Callback)方法将被拒绝。对于布局大小,建议将WebView的高度设置为固定值或MATCH_PARENT而不是WRAP_CONTENT。如果WebView的高度使用MATCH_PARENT,其父布局高度实用WRAP_CONTENT会导致石梯尺寸不一致。将WebView的高度设置为WRAP_CONTENT会出现以下行为:HTML的高度设置为固定值,这意味着元素的大小相对于HTMLBODY的高度可能不正确;应用所在的设备是Android4.4及更早的SDK,为了向后兼容,meta标签将被忽略;不支持使用WRAP_CONTENT的布局宽度。如果使用这样的宽度,WebView将尝试使用其父布局的宽度。关于收集错误数据如果用户同意,WebView的部分诊断数据将以匿名方式上传至Google。这些数据将帮助谷歌改进WebView。每个已初始化WebView的应用程序都会收集这些数据。如果要禁用这个功能需要在manifest文件中设置如下:参考链接:WebView官方网站介绍如果觉得对你有帮助,可以关注公众号:jzman-blog,一起交流学习。