最近做了一个在Android textView中支持解析H5超链接和字体颜色的需求,遇到了一些坑,分享出来希望可以帮助到大家。
1,解析字体颜色
下面这句代码就可以支持解析字体颜色,但是不支持rgb格式,仅支持#5BAA3D类型的16进制颜色格式。
tv.setText(Html.fromHtml(htmlText));
2,解析超链接并拦截点击事件
先贴上完整代码
tv.setText(getClickableHtml(htmlText));
tv.setMovementMethod(LinkMovementMethod.getInstance());
private CharSequence getClickableHtml(String html) {
Spanned spannedHtml = Html.fromHtml(html);
SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
for(final URLSpan span : urls) {
setLinkClickable(clickableHtmlBuilder, span);
}
return clickableHtmlBuilder;
}
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder,
final URLSpan urlSpan) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View view) {
// do someThing
}
};
clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}
<TextView
android:id="@+id/text_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="3dp"
android:textColor="#9f9f9f"
android:textSize="12sp"
android:autoLink="web"/>
2.1,支持超链接点击要设置tv.setMovementMethod(LinkMovementMethod.getInstance());否则就算字体已经变蓝但是点击没反应
2.2,拦截超链接点击事件还需要在xml文件中设置android:autoLink=“web”,否则拦截不了拦截超链接点击事件