Android利用SpannableString改变超链接文本颜色

mac2024-04-01  28

超链接文本在textview中被赋予了默认的颜色,如果想要更改,可以通过

SpannableString或SpannableStringBuilder实现:

某些属性可参考 :https://www.jianshu.com/p/112238fd86e1

SpannableString sp=new SpannableString(textview.getText()); Pattern p = Pattern.compile("((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)", Pattern.CASE_INSENSITIVE); //匹配网址格式 Linkify.addLinks(sp, p, ""); int textColor= Color.YELLOW; URLSpan[] spans = sp.getSpans(0, sp.length(), URLSpan.class); for (URLSpan span: spans) { stringBuilder.setSpan(new MyUrlSpan(textColor),sp.getSpanStart(span) ,sp.getSpanEnd(span), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } textview.setText(stringBuilder); textview.setMovementMethod(LinkMovementMethod.getInstance());

 

public class MyUrlSpan extends ClickableSpan { private String TAG="MyUrlSpan"; private int tv_color= Color.BLUE; public MyUrlSpan(int tv_color) { this.tv_color = tv_color; } @Override public void updateDrawState(TextPaint ds) { // super.updateDrawState(ds); ds.setColor(tv_color); } @Override public void onClick(View widget) { Log.e(TAG, "onClick: 点击" ); } }

我在使用SpannableString的时候,发现对网址的属性点击事件没有响应,替换成SpannableStringBuilder后就可以了

最新回复(0)