在TextView中显示带有CSS类的HTML文本,可以通过以下步骤实现:
String htmlText = "<p><span class=\"red\">这是红色文本</span></p>";
Spanned spannedText = Html.fromHtml(htmlText);
public class CustomTagHandler implements Html.TagHandler {
@Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
if (tag.equalsIgnoreCase("span")) {
handleSpanTag(opening, output);
}
}
private void handleSpanTag(boolean opening, Editable output) {
int len = output.length();
if (opening) {
output.setSpan(new ForegroundColorSpan(Color.RED), len, len, Spannable.SPAN_MARK_MARK);
} else {
Object obj = getLast(output, ForegroundColorSpan.class);
int where = output.getSpanStart(obj);
output.removeSpan(obj);
if (where != len) {
output.setSpan(new ForegroundColorSpan(Color.RED), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
private Object getLast(Editable text, Class kind) {
Object[] spans = text.getSpans(0, text.length(), kind);
if (spans.length == 0) {
return null;
} else {
for (int i = spans.length; i > 0; i--) {
if (text.getSpanFlags(spans[i - 1]) == Spannable.SPAN_MARK_MARK) {
return spans[i - 1];
}
}
return null;
}
}
}
TextView textView = findViewById(R.id.textView);
textView.setText(spannedText);
需要注意的是,为了使自定义的标签处理器生效,需要在调用Html.fromHtml()方法时传入一个自定义的标签处理器对象。示例代码如下:
Html.fromHtml(htmlText, null, new CustomTagHandler());
这样,就可以在TextView中显示带有CSS类的HTML文本了。
推荐的腾讯云相关产品:腾讯云移动推送(https://cloud.tencent.com/product/tpns)
领取专属 10元无门槛券
手把手带您无忧上云