在App應用中,咱們經常會加載一些新聞、通知等內容,這些內容不少來自於數據庫中存儲的HTML文本,裏面的標籤雜亂不堪,且內容中又包括圖片等。css
處理這些內容,咱們能夠利用正則表達式來處理,但標籤太多,太雜,又想保留換行等格式,正則表達式寫起來麻煩,我是個懶人,因而有了更簡便的方法,就是利用Jsoup來處理。示例HTML代碼以下:html
<p style="\"font-family:" simsun;="" font-size:="" 14px;\"=""> 記者從貴陽市旅遊產業發展委獲悉,國慶黃金週臨近,爽爽貴陽一片秋意濃。即日起,市內各大景區景點紛紛推出各種特點國慶、中秋主題節慶活動,給市民遊客帶來一個豐盛的節日盛宴。</p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""><img id="\"6276046\"" title="\"\"" border="\"0\"" src="\"http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c33901.jpg\"" sourcedescription="\"編輯提供的本地文件\"" sourcename="\"本地文件\"" data-bd-imgshare-binded="\"1\"" style="\"max-width:" 100%;="" height:="" 500px;="" width:="" 400px;\"="" /></p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""> 圖爲20萬盆菊花扮靚花畫小鎮,與市民遊客一塊兒迎國慶</p> <p style="\"font-family:" simsun;="" font-size:="" 14px;\"=""> 長假期間,國家5A級旅遊景區青巖古鎮將開展豐富多彩的民族文藝演出,演出內容包括滾山珠、錦雞舞等貴州非遺文化品牌節目。在狀元街,知名專家將現場傳授植物扎染及香囊製做工藝體驗。同時,貴州飯店國際會議中心將開通「青巖古鎮旅遊直通車」,天天發車,貴州飯店至青巖古鎮28元/人/趟、大學城至青巖古鎮10元/人/趟。</p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;\"=""><img id="\"6276048\"" title="\"\"" border="\"0\"" src="\"http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c34502.jpg\"" sourcedescription="\"編輯提供的本地文件\"" sourcename="\"本地文件\"" data-bd-imgshare-binded="\"1\"" style="\"max-width:" 100%;="" height:="" 350px;="" width:="" 500px;\"="" /></p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""> 圖爲20萬盆菊花扮靚花畫小鎮,與市民遊客一塊兒迎國慶</p> <p style="\"font-family:" simsun;="" font-size:="" 14px;\"=""> 秋高氣爽看10月,在烏當區花畫小鎮,20萬盆菊花上山,穿上盛裝迎接國慶中秋「雙節」。這次花展將從10月1日持續至11月30日,共兩個月。遊客不只可在園區「廊橋」欣賞菊花種類、食用藥用價值和有關菊花的文學做品等知識展板,還可在菊展的三個展銷區域,免費領取菊花茶一袋,每日限量300份。此外,還有優秀國畫及書法做品,讓遊客近距離感覺中國文化的博大精深;在菊花詩詞朗誦區域,園區將爲遊客提供一個文化展現與才藝交流的平臺。</p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""><img id="\"6276052\"" title="\"\"" border="\"0\"" src="\"http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c35804.jpg\"" sourcedescription="\"編輯提供的本地文件\"" sourcename="\"本地文件\"" data-bd-imgshare-binded="\"1\"" style="\"max-width:" 100%;="" height:="" 350px;="" width:="" 400px;\"="" /></p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""> 圖爲20萬盆菊花扮靚花畫小鎮,與市民遊客一塊兒迎國慶</p> <p style="\"font-family:" simsun;="" font-size:="" 14px;\"=""> 雙節期間,修文縣將舉辦「野生動物園現場特惠+農業嘉年華現場特惠」、「漂流(上半程)+朵芳閣桃源河酒店」等活動,凡10月1日-7日期間遊玩野生動物園的遊客,用手機與動物園小動物自拍合影,以及赴農業嘉年華進行參觀的遊客,用手機在現場自拍,經工做人員驗證後,桃源河漂流上半段票價可享受學生票價80元/人優惠。此外,中秋節10月4日當天,遊客還可在朵芳閣參與免費領月餅、猜燈謎等活動。</p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""><img id="\"6276054\"" title="\"\"" border="\"0\"" align="\"center\"" src="\"http://www.gywb.cn/xinwen/attachement/jpg/site2/20170927/3417eb9bc7b41b35c36305.jpg\"" sourcedescription="\"編輯提供的本地文件\"" sourcename="\"本地文件\"" data-bd-imgshare-binded="\"1\"" style="\"max-width:" 100%;="" height:="" 350px;="" width:="" 500px;\"="" /></p> <p align="\"center\"" style="\"font-family:" simsun;="" font-size:="" 14px;="" text-align:="" center;\"=""> 圖爲20萬盆菊花扮靚花畫小鎮,與市民遊客一塊兒迎國慶</p> <p style="\"font-family:" simsun;="" font-size:="" 14px;\"=""> 貴陽市旅遊產業發展委舒適提醒廣大遊客,出行前作好計劃,提前瞭解景區的開放狀況和周邊交通、餐飲、天氣等。出遊的過程當中要注意安全,遵照景區的安全警示,遊客在身體不適的狀況下不要勉強進行旅遊活動。經過網絡等自由組團進行戶外探險等活動時,要詳細瞭解組織者的身份、資質,目的地的氣候、團友的組成結構等信息,事先作好充分的準備。此外,遊客還應遵照法律規定,作到文明出行。</p>
下面,咱們就來一步步處理這些內容並顯示web
一、要在App的build.gradle引入Jsoup正則表達式
implementation 'org.jsoup:jsoup:1.11.3'
二、設置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縮放按鈕(經過這個設置則能夠不顯示那個縮放工具條)
三、添加一段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>";
四、寫一個簡單的處理函數來清理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;
}
}
五、經過上述處理後,咱們就能夠直接用WebView來處理了函數
webView.loadData(getNewHtml(htmlText), "text/html; charset=UTF-8", null);
顯示效果以下圖:工具
經過一系列的處理,咱們已經將不一樣格式的HTML以及HTML中不一樣大小的圖片按照統一的標準來展現,同時保留了原來的換行格式。字體
注:Jsoup clena的參數說明
WhiteList中有幾個參數選項
一、none()
只保留文本,其餘全部的html內容均被刪除
二、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這個屬性。不容許包含圖片。
三、basicWithImages()
在basic的基礎上增長了圖片的標籤:img以及使用src指向http或https類型的圖片連接。
四、simpleText()
只容許: b, em, i, strong, u
五、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));
其中白名單根據本身的需求進行變動。