Android中利用Jsoup让WebView清除Html标签并让图片适应大小并居中

       在App应用中,我们常常会加载一些新闻、通知等内容,这些内容很多来自于数据库中存储的HTML文本,里面的标签杂乱不堪,且内容中又包括图片等。

       处理这些内容,我们可以利用正则表达式来处理,但标签太多,太杂,又想保留换行等格式,正则表达式写起来麻烦,我是个懒人,于是有了更简便的方法,就是利用Jsoup来处理。示例HTML代码如下:

  <p style="\&quot;font-family:" simsun;="" font-size:="" 14px;\"="">&nbsp; &nbsp;记者从贵阳市旅游产业发展委获悉,国庆黄金周临近,爽爽贵阳一片秋意浓。即日起,市内各大景区景点纷纷推出各类特色国庆、中秋主题节庆活动,给市民游客带来一个丰盛的节日盛宴。</p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""><img id="\&quot;6276046\&quot;" title="\&quot;\&quot;" border="\&quot;0\&quot;" src="\&quot;http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c33901.jpg\&quot;" sourcedescription="\&quot;编辑提供的本地文件\&quot;" sourcename="\&quot;本地文件\&quot;" data-bd-imgshare-binded="\&quot;1\&quot;" style="\&quot;max-width:" 100%;="" height:="" 500px;="" width:="" 400px;\"="" /></p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"="">&nbsp;&nbsp;&nbsp;&nbsp;图为20万盆菊花扮靓花画小镇,与市民游客一起迎国庆</p>
  <p style="\&quot;font-family:" simsun;="" font-size:="" 14px;\"="">&nbsp; &nbsp;长假期间,国家5A级旅游景区青岩古镇将开展丰富多彩的民族文艺演出,演出内容包括滚山珠、锦鸡舞等贵州非遗文化品牌节目。在状元街,知名专家将现场传授植物扎染及香囊制作工艺体验。同时,贵州饭店国际会议中心将开通“青岩古镇旅游直通车”,每天发车,贵州饭店至青岩古镇28元/人/趟、大学城至青岩古镇10元/人/趟。</p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;\"=""><img id="\&quot;6276048\&quot;" title="\&quot;\&quot;" border="\&quot;0\&quot;" src="\&quot;http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c34502.jpg\&quot;" sourcedescription="\&quot;编辑提供的本地文件\&quot;" sourcename="\&quot;本地文件\&quot;" data-bd-imgshare-binded="\&quot;1\&quot;" style="\&quot;max-width:" 100%;="" height:="" 350px;="" width:="" 500px;\"="" /></p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"="">&nbsp;图为20万盆菊花扮靓花画小镇,与市民游客一起迎国庆</p>
  <p style="\&quot;font-family:" simsun;="" font-size:="" 14px;\"="">&nbsp; &nbsp;秋高气爽看10月,在乌当区花画小镇,20万盆菊花上山,穿上盛装迎接国庆中秋“双节”。此次花展将从10月1日持续至11月30日,共两个月。游客不仅可在园区“廊桥”欣赏菊花种类、食用药用价值和有关菊花的文学作品等知识展板,还可在菊展的三个展销区域,免费领取菊花茶一袋,每日限量300份。此外,还有优秀国画及书法作品,让游客近距离感受中国文化的博大精深;在菊花诗词朗诵区域,园区将为游客提供一个文化展示与才艺交流的平台。</p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""><img id="\&quot;6276052\&quot;" title="\&quot;\&quot;" border="\&quot;0\&quot;" src="\&quot;http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c35804.jpg\&quot;" sourcedescription="\&quot;编辑提供的本地文件\&quot;" sourcename="\&quot;本地文件\&quot;" data-bd-imgshare-binded="\&quot;1\&quot;" style="\&quot;max-width:" 100%;="" height:="" 350px;="" width:="" 400px;\"="" /></p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"="">&nbsp;图为20万盆菊花扮靓花画小镇,与市民游客一起迎国庆</p>
  <p style="\&quot;font-family:" simsun;="" font-size:="" 14px;\"="">&nbsp; &nbsp;双节期间,修文县将举办“野生动物园现场特惠+农业嘉年华现场特惠”、“漂流(上半程)+朵芳阁桃源河酒店”等活动,凡10月1日-7日期间游玩野生动物园的游客,用手机与动物园小动物自拍合影,以及赴农业嘉年华进行参观的游客,用手机在现场自拍,经工作人员验证后,桃源河漂流上半段票价可享受学生票价80元/人优惠。此外,中秋节10月4日当天,游客还可在朵芳阁参与免费领月饼、猜灯谜等活动。</p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""><img id="\&quot;6276054\&quot;" title="\&quot;\&quot;" border="\&quot;0\&quot;" align="\&quot;center\&quot;" src="\&quot;http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c36305.jpg\&quot;" sourcedescription="\&quot;编辑提供的本地文件\&quot;" sourcename="\&quot;本地文件\&quot;" data-bd-imgshare-binded="\&quot;1\&quot;" style="\&quot;max-width:" 100%;="" height:="" 350px;="" width:="" 500px;\"="" /></p>
  <p align="\&quot;center\&quot;" style="\&quot;font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"="">&nbsp;图为20万盆菊花扮靓花画小镇,与市民游客一起迎国庆</p>
  <p style="\&quot;font-family:" simsun;="" font-size:="" 14px;\"="">&nbsp; &nbsp;贵阳市旅游产业发展委温馨提醒广大游客,出行前做好计划,提早了解景区的开放情况和周边交通、餐饮、天气等。出游的过程中要注意安全,遵守景区的安全警示,游客在身体不适的情况下不要勉强进行旅游活动。通过网络等自由组团进行户外探险等活动时,要详细了解组织者的身份、资质,目的地的气候、团友的组成结构等信息,事先做好充分的准备。此外,游客还应遵守法律规定,做到文明出行。</p>

 

       下面,我们就来一步步处理这些内容并显示

 

       1、要在App的build.gradle引入Jsoup

    implementation 'org.jsoup:jsoup:1.11.3'

       2、设置WebView属性

     WebSettings webSettings = webView.getSettings();//获取WebView的设置属性
     webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//把html中的内容放大到WebView等宽的一列中
     webSettings.setJavaScriptEnabled(true);//让WebView支持js
     webSettings.setSupportZoom(true); // 可以缩放
     webSettings.setBuiltInZoomControls(true); // 显示放大缩小(这个不设置则缩放不起作用)
     webSettings.setDisplayZoomControls(false);//不显示webview缩放按钮(通过这个设置则可以不显示那个缩放工具条)

       3、添加一段css样式以让WebView按新的样式显示,在这段样式中设定了字体大小,图片大小以及水平居中

    private static final String cssStart = "<html>" + "\n"+
                                  "<header>" + "\n"+
                                  "<style type=\"text/css\"> img {" +
                                  "width:90%;" +
                                  "height:auto;" +
                                  "display:block;" +
                                  "clear:both;" +
                                  "margin:auto" +
                                  "}" + "\n" +
                                  "body {" +
                                  "margin-right:15px;" +
                                  "margin-left:15px;" +
                                  "margin-top:15px;" +
                                  "font-size:21px;" +
                                  "}" + "\n" +
                                  "</style>" + "\n" +
                                  "</header>" + "\n" +
                                  "<body>" +"\n";
    private static final String cssEnd = "\n"+"</body>"+"\n"+"</html>";

       4、写一个简单的处理函数来清理HTML内容并保留换行格式以及添加新的css样式

    public static String getNewHtml(String htmlText){
      try {
        htmlText =
        htmltext = Jsoup.clean(htmltext,Whitelist.basicWithImages());
        htmltext = cssStart+htmltext+cssEnd;
  
      return htmltext;       
      }
catch (Exception e) {         
        return
htmltext;       
      }     
    }

       5、通过上述处理后,我们就可以直接用WebView来处理了

    webView.loadData(getNewHtml(htmlText), "text/html; charset=UTF-8", null);

  显示效果如下图:

  通过一系列的处理,我们已经将不同格式的HTML以及HTML中不同大小的图片按照统一的标准来展示,同时保留了原来的换行格式。

  注:Jsoup clena的参数说明

  WhiteList中有几个参数选项

  1、none()  

  只保留文本,其他所有的html内容均被删除

  2、basic() 

  允许的标签包括: a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, strike, strong, sub, sup, u, ul,以及合适的属性。标签a指向的连接可以是 http, https, ftp, mailto,转换完后会强制添加 rel=nofollow这个属性。不允许包含图片。

  3、basicWithImages()

  在basic的基础上增加了图片的标签:img以及使用src指向http或https类型的图片链接。

  4、simpleText()

  只允许: b, em, i, strong, u

  5、relaxed() 

  允许的标签: a, b, blockquote, br, caption, cite, code, col, colgroup, dd, dl, dt, em, h1, h2, h3, h4, h5, h6, i, img, li, ol, p, pre, q, small, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, u, ul。结果不包含标签rel=nofollow ,如果需要可以手动添加。

  如果只想保留文本及换行,则clean的代码换成如下:

    String htmlText=Jsoup.clean(html, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));

  其中白名单根据自己的需求进行变更。

  

 

转载于:https://www.cnblogs.com/walkingblue/p/9013977.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值