我正在使用Html.fromHtml()在TextView中显示一些简单的Html。根据我的口味,<h2>
标题的字体大小有点太大,所以我想知道如何做到这一点,Html类没有方法。
我将深入研究source code,看看我是否可以扩展一个类,覆盖一个方法或其他东西,但也许有人已经实现了为某些Html标签设置字体大小?
答案 0 :(得分:2)
这是可能的。您只需使用Html.fromHtml()
与您自己的处理程序一起使用。
你可以这样做:
CharSequence html = Html.fromHtml(markdownString, null, new TitleHandler());
...
static class TitleHandler implements TagHandler {
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if (tag.equalsIgnoreCase("h2")) {
processH2(opening, output);
}
}
public void processH2(boolean opening, Editable output) {
int len = output.length();
if (opening) {
output.setSpan(new RelativeSizeSpan(0.8f), len, len,
Spannable.SPAN_MARK_MARK);
} else {
Object obj = getLast(output, RelativeSizeSpan.class);
int where = output.getSpanStart(obj);
output.removeSpan(obj);
if (where != len) {
output.setSpan(new RelativeSizeSpan(0.8f), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private Object getLast(Editable text, Class kind) {
Object[] objs = text.getSpans(0, text.length(), kind);
if (objs.length == 0) {
return null;
} else {
for (int i = objs.length; i > 0; i--) {
if (text.getSpanFlags(objs[i - 1]) == Spannable.SPAN_MARK_MARK) {
return objs[i - 1];
}
}
return null;
}
}
}
使用new RelativeSizeSpan(0.8f)
,您可以在Span
元素内的TextView
中绘制<h2>
,其相对大小为80%。
Android的所有HTML标记处理程序也都是这样定义的。