如何在TextView中显示格式化的HTML

时间:2015-06-18 00:00:58

标签: android

我知道我可以使用:

textview.setText(Html.fromHtml("html stuff"))

but that doesn't know how to handle lists and a lot of other elements

由于某种原因,它还增加了很多填充,总体来说似乎不是一个很好的解决方案。

我尝试使用WebViews代替TextViews。但是,这非常昂贵,所以它不是一种选择。

这看起来像是一个标准的东西,必须有一种方法可以很好地做到这一点,或者为它做一个库,还是在那里?

2 个答案:

答案 0 :(得分:0)

这里有我的TextView子类中用于处理子弹的一些代码,我省略了简单的部分。

@Override
public void setText(CharSequence text, BufferType type) {

    StringBuilder sb = new StringBuilder();
    List<Integer> markers = new ArrayList<Integer>();

    /*
     *  Code to parse through text, remove tags, build up modified text in 
     *  StringBuilder and mark the bullet paragraph boundaries goes here.
     *  Left as an exercise for the reader.
     */

    SpannableString spannableString = new SpannableString(sb.toString());
    for (int i = 0; i < markers.size(); i += 2) {
        int start = markers.get(i);
        int end = markers.get(i+1);
        spannableString.setSpan(new BulletSpan(bulletGap), start, end, Spannable.SPAN_PARAGRAPH);
    }

    super.setText(spannableString, BufferType.SPANNABLE);
}

注意:如果我没记错的话,Android 真的希望Paragraph Span以换行符结尾。

我也尝试了但是无法弄清楚如何使用LineHeightSpan使子弹的第一行和最后一行跨越段落。

如果您想要一个数字(有序)列表,您可以自己动手。

答案 1 :(得分:0)

解决方案是实现TagHandler并将其传递给fromHtml。这里已经有一个不错的了:

https://github.com/sufficientlysecure/html-textview

唯一的问题是,由于没有理由,最后会有一些额外的空间。您可以编写一个简单的函数来修剪这些额外的换行符。