天天看點

防微網誌内容展示,使用Html.fromHtml(),解決内容不能換行的問題

       使用Html.fromHtml(),解決内容不能換行的問題,模仿微網誌内容展示效果。

一、需求要實作的效果

        如下圖中箭頭指向的微網誌内容部分,包含超連結,點選超連結後要跳轉到相應的WebView頁面。(csdn上傳圖檔試了好多遍也不成功,大家腦補一下吧,辛苦了)。

防微網誌内容展示,使用Html.fromHtml(),解決内容不能換行的問題
防微網誌内容展示,使用Html.fromHtml(),解決内容不能換行的問題

二、 實作思路

        首先擷取網絡資料,通過Html.fromHtml()解析擷取到的資料,這時超連結<a></a>、段落符<p>、換行符<br>等将會被展示成對應的表現形式,就會出現上圖所示的效果。然後我們解決第二個問題,點選跳轉的問題,直接上代碼。

/**
 * 設定TextView中URL由内嵌浏覽器打開
 * @param context
 * @param textView
*/
public static void setOpenUrlByBrowser(Context context, TextView textView) {
textView.setMovementMethod(LinkMovementMethod.getInstance());
CharSequence text = textView.getText();
if (text instanceof Spannable) {
int end = text.length();
Spannable sp = (Spannable) textView.getText();
URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.clearSpans();
for (URLSpan url : urls) {
MyURLSpan myURLSpan = new MyURLSpan(context, url.getURL());
style.setSpan(myURLSpan, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setText(style);
}
}
           

        其中主要用到的類有 Spannable、SpannableStringBuilder,如果有不了解兩類的同學,可以Google這連個類,後面有時間也會分析這兩個類的實作。至于MyURLSpan是自定義的一個超連結點選之後的操作類,在這裡實作界面的跳轉。So,我們實作了展示和跳轉。

三、 遇到的問題

        如上編碼之後,我遇到了文本不能換行的問題,如在我的應用中我發的一遍文章帶有換行的文章,但是在文章詳情頁面沒有換行顯示。

四、 分析原因

        檢視服務端傳回的資料,發現時這樣的。 “ 這是一個測試用的文章\n我想測試他能不能換行\n”,于是找到了原因,html不能解析“\n”。

五、 解決辦法

         最吊炸天的地方來了,将所有的“\n”轉換成“<br>”,代碼如下,這樣就可以解決問題。

private String parseContent(String content) {
if(StringUtil.isNotEmpty(content)){
content = content.replace("\n","<br>");
}
return content;
}
           

六、 總結

        來自地球的小夥伴們,如上隻是這個小問題的解決思路,聰明的你一定會舉一反三,在parseContent中去充分發揮,解決其他的問題,今天是七夕,祝情人節快樂奧,O(∩_∩)O哈哈~