最近遇到了一些富文本處理的坑唇敞,特此分享下
TextView
Html.fromHtml(data.getPro_job())
這個(gè)方式最簡(jiǎn)單墩弯,缺陷是不能解析ul
兰英、li
等類型標(biāo)簽玷坠。
RichText
RichText.from(data.getPro_job()).into(wvDes);
RichText 是Android平臺(tái)下的富文本解析器蜗搔,支持Html和Markdown,這樣就可以解析ul
等標(biāo)簽八堡,但缺陷是字體樣式加載會(huì)有問題樟凄,比如說加粗、顏色等兄渺。
WebView
建議使用騰訊x5瀏覽器缝龄,使用方法可查看另一篇博客【Android Web】騰訊X5瀏覽器的集成與常見問題
webView.loadDataWithBaseURL("", data.getPro_intro(), "text/html", "utf-8", null);
如果不是完整的html,可以手動(dòng)添加完整標(biāo)簽
/**
* 加載html標(biāo)簽
*
* @param bodyHTML
* @return
*/
private String getHtmlData(String bodyHTML) {
String head = "<head>" +
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\"> " +
"<style>img{max-width: 100%; width:auto; height:auto!important;}</style>" +
"</head>";
return "<html>" + head + "<body>" + bodyHTML + "</body></html>";
}
webview
在解析標(biāo)簽上沒有問題挂谍,但是又引發(fā)了另一個(gè)問題叔壤,ScrollView
嵌套下,底部會(huì)有一大片的空白口叙。
這個(gè)問題有2種處理方式
- 獲取
html
的內(nèi)容高度炼绘,然后再設(shè)置給webview
wvDes.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String s) {
super.onPageFinished(webView, s);
wvDes.loadUrl("javascript:app.resize(document.body.getBoundingClientRect().height)");
}
});
wvDes.addJavascriptInterface(new WebViewJavaScriptFunction() {
@Override
public void onJsFunctionCalled(String tag) {
}
@JavascriptInterface
public void resize(int height) {
wvDes.postDelayed(new Runnable() {
@Override
public void run() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height + 80);
wvDes.setLayoutParams(params);
}
}, 100);
}
}, "app");
但是,經(jīng)測(cè)試妄田,在部分華為手機(jī)上俺亮,document.body.getBoundingClientRect().height
獲取的高度不正確,只能無奈放棄疟呐。
- addView
mParentLayout.removeAllViews();
WebView webView = new WebView(this);
webView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
webView.loadDataWithBaseURL("", data.getPro_intro(), "text/html", "utf-8", null);
mParentLayout.addView(webView);