Android开发中使用WebView控件浏览网页的方法详解

Android开发中使用WebView控件浏览网页的方法详解,第1张

概述本文实例讲述了Android开发中使用WebView控件浏览网页的方法。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID开发中使用WebVIEw控件浏览网页的方法。分享给大家供大家参考,具体如下:

项目中遇到数学展示问题,常规的TextvIEw显示处理不了数学公式,利用图片生成对服务器又产生较大压力,经过查询,可以通过webvIEw加载Js实现。IOS同样的方法也可实现,但Js渲染效率远高于安卓。对WebvIEw做下总结。

1.WebVIEw

在使用WebVIEw控件时,首先需要在xml布局文件中定义一个WebVIEw控件,定义的方法如下:

<WebVIEw  androID:ID="@+ID/webVIEw"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  />

WebVIEw中提供了很多方法,例如,我们可以使用canGoBack()方法判断是否能够从该网页返回上一个打开的网页;使用getTitle()getUrl()方法获得当前网页的标题和URL路径;使用loadUrl(String url)方法加载所要打开的网页等等。如下的代码通过使用loadUrl()方法在WebVIEw控件中打开了百度主页。

2.WebSettings

WebSettings用来设置WebVIEw的属性和状态。WebSettings和WebVIEw存在于同一个生命周期中,可以使用如下的方法获得WebSettings对象。

WebSettings webSettings = mWebVIEw.getSettings();

在创建WebVIEw时,系统会对WebVIEw进行一些默认设置,当我们通过以上的方法得到WebSettings对象后,便可以从WebSettings对象中取出WebVIEw的默认属性和状态了,当然了,我们也可以通过WebSettings对象对WebVIEw的默认属性和状态进行设置。

WebSettings提供的一些常用的设置WebVIEw的属性和状态的方法如下:

(1)setAllowfileAccess(boolean allow); //设置启用或禁止访问文件数据
(2)setBuiltInZoomControls(boolean enabled); //设置是否支持缩放
(3)setDefaultFontSize(int size);    //设置默认的字体大小
(4)setJavaScriptEnabled(boolean flag);  //设置是否支持JavaScript
(5)setSupportZoom(boolean support); //设置是否支持变焦

3.WebVIEwClIEnt

WebVIEwClIEnt主要用来辅助WebVIEw处理各种通知、请求等事件。我们可以通过WebVIEw的setWebVIEwClIEnt()方法,为WebVIEw对象指定一个WebVIEwClIEnt,具体的实现方法如下所示:

MyWebVIEwClIEnt myWebVIEwClIEnt = new MyWebVIEwClIEnt();mWebVIEw.setWebVIEwClIEnt(myWebVIEwClIEnt);private class MyWebVIEwClIEnt extends WebVIEwClIEnt {    //重写父类方法,让新打开的网页在当前的WebVIEw中显示    public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw,String url) {      vIEw.loadUrl(url);      return true;    }}

可以看到,在如上的代码中,我们通过在子类MyWebVIEwClIEnt中重写父类WebVIEwClIEnt的shouldOverrIDeUrlLoading()方法,实现了让新打开的网页在当前的WebVIEw中进行显示,而不是调用AndroID系统自带的浏览器进行访问。

在WebVIEwClIEnt中同样提供了很多的方法,比如以下一些:

(1)doUpdateVisitedHistory(WebVIEw vIEw,String url,boolean isReload);   //更新历史记录
(2)onFormResubmission(WebVIEw vIEw,Message dontResend,Message resend);  //重新请求网页数据
(3)onLoadResource(WebVIEw vIEw,String url); //加载指定网址提供的资源
(4)onPageFinished(WebVIEw vIEw,String url);  //网页加载完毕
我们所做的Js渲染就是在 onpageFinish 之后进行的,Js 越复杂,渲染越慢。
(5)onPageStarted(WebVIEw vIEw,Bitmap favicon);//网页开始加载
(6)onReceivedError(WebVIEw vIEw,int errorCode,String description,String failingUrl);//报告错误信息

主要是在网页加载失败后去调用显示。

4.WebChromeClIEnt

WebChromeClIEnt主要用来辅助WebVIEw处理JavaScript的对话框、网站图标、网站标题以及网页加载进度等。

同样地,我们可以通过WebVIEw的setWebChromeClIEnt()方法,为WebVIEw对象指定一个WebChromeClIEnt。

在WebChromeClIEnt中,当网页的加载进度发生变化时,onProgressChanged(WebVIEw vIEw,int newProgress)方法会被调用;当网页的图标发生改变时,onReceivedIcon(WebVIEw vIEw,Bitmap icon)方法会被调用;当网页的标题发生改变时,onReceivedTitle(WebVIEw vIEw,String Title)方法会被调用。利用这些方法,我们便可以很容易的获得网页的加载进度、网页的标题和图标等信息了,正如下面的代码所示:

MyWebChromeClIEnt myWebChromeClIEnt = new MyWebChromeClIEnt();mWebVIEw.setWebChromeClIEnt(myWebChromeClIEnt);private class MyWebChromeClIEnt extends WebChromeClIEnt {    //获得网页的加载进度,显示在右上角的TextVIEw控件中    public voID onProgressChanged(WebVIEw vIEw,int newProgress) {      if(newProgress < 100) {        String progress = newProgress + "%";        mTextVIEw_progress.setText(progress);      } else {        mTextVIEw_progress.setText(" ");      }    }    //获得网页的标题,作为应用程序的标题进行显示    public voID onReceivedTitle(WebVIEw vIEw,String Title) {      MainActivity.this.setTitle(Title);    }}

5.WebVIEw与JavaScript

在WebVIEw中不仅可以运行HTML代码,更重要的是,WebVIEw可以与JavaScript互相调用。也就是说,在JavaScript中可以获取WebVIEw的内容,与此同时,在WebVIEw中也可以调用JavaScript里面的方法。

下面就来说说如何在WebVIEw中调用JavaScript里面的方法。

这里,我使用了百度地图的API接口(一份内嵌了JavaScript的HTML文档),在该接口中提供如下的JavaScript方法:

/*********************************//*      查找地点      *//*********************************/var city = new BMap.LocalSearch(map,{renderOptions:{map:map,autoVIEwport:true}});function findplace(place){    city.search(place);}

我们要做的就是在WebVIEw中调用findplace()方法,完成地点的查找。在WebVIEw中调用JavaScript里面的方法是通过代码WebVIEw.loadUrl("JavaScript:方法名()")来实现的。如下的代码,从EditText控件中获得用户想要查找的地名,然后调用了JavaScript中的findplace()方法,进行查找。

public voID onClick(VIEw vIEw) {    switch(vIEw.getID()) {    case R.ID.imagebutton_search: //查找地名      String str = mEditText_input.getText().toString();      String url = "JavaScript:findplace('" + str + "')";      mWebVIEw.loadUrl(url);      break;    }}

6  WebvIEw 加载Js 的加速

public voID optimizaWebvIEw() {    if (webVIEw != null) {      if (Build.VERSION.SDK_INT >= 19) {        webVIEw.getSettings().setLoadsImagesautomatically(true);      } else {        webVIEw.getSettings().setLoadsImagesautomatically(false);      }      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {        webVIEw.setLayerType(VIEw.LAYER_TYPE_SOFTWARE,null);      }      webVIEw.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);      webVIEw.getSettings().setBlockNetworkImage(true);      webVIEw.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);      webVIEw.getSettings().setDatabaseEnabled(true);      webVIEw.getSettings().setAppCacheEnabled(true);      webVIEw.getSettings().setAppCachePath("/data/data/com.kuailexue.student/cache");      webVIEw.getSettings().setAppCacheMaxSize(5 * 1024 * 1024);      webVIEw.setHorizontalScrollbarEnabled(true);      webVIEw.getSettings().setJavaScriptEnabled(true);      webVIEw.setWebChromeClIEnt(new WebChromeClIEnt());      webVIEw.getSettings().setDomStorageEnabled(true);    }}

加载String

webVIEw.loadDataWithBaseURL(null,buffer.toString(),text/HTML,UTF-8,null);

webvIEw 加载图片

<img src="imgurl"/>

加载 assets 下的HTML

webVIEw.loadUrl("file:///androID_asset/index.HTML");

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android视图View技巧总结》、《Android编程之activity *** 作技巧总结》、《Android布局layout技巧总结》、《Android开发入门与进阶教程》、《Android资源 *** 作技巧汇总》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android开发中使用WebView控件浏览网页的方法详解全部内容,希望文章能够帮你解决Android开发中使用WebView控件浏览网页的方法详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1144154.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存