我知道我可以使用:
textview.setText(Html.fromHtml("html stuff"))
but that doesn't know how to handle lists and a lot of other elements
由于某种原因,它还增加了很多填充,总体来说似乎不是一个很好的解决方案。
我尝试使用WebViews代替TextViews。但是,这非常昂贵,所以它不是一种选择。
这看起来像是一个标准的东西,必须有一种方法可以很好地做到这一点,或者为它做一个库,还是在那里?
答案 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
唯一的问题是,由于没有理由,最后会有一些额外的空间。您可以编写一个简单的函数来修剪这些额外的换行符。