超链接文本在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后就可以了