它调用ds.setUnderlineText(true); 设置了下划线。我们再设置一个没有下划线的Spannable对象就可以了。 我们重写一个类继承UnderlineSpan,和ClickableSpan一样,都是CharacterStyle的子类。
使用方法如下:
public class Test10Activity extends Activity {
TextView textView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test10);
textView = (TextView) findViewById(R.id.text);
String webLinkText = "我的博客-->https://www.easck.com/pre>
这样textview在界面上就不会有下划线了,但却保留着autolink的功能。 这个超链接是默认颜色,如果需要改变颜色可以在xml中设置android:textColorLink="#1e84fb", 或者在java代码中设置tv.setLinkTextColor(color);
上面的例子是在autoLink设置的情况下自动识别超链接的,如果不需要自动识别,而是自己手动设置需要跳转的网址, 可以使用以下方法,首先删除xml中的android:autoLink="email|phone|web"
public class Test10Activity extends Activity {
TextView textView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test10);
textView = (TextView) findViewById(R.id.text);
String webLinkText = "我的博客" ;
SpannableString text = new SpannableString(webLinkText);
NoUnderlineSpan mNoUnderlineSpan = new NoUnderlineSpan("https://www.easck.com/pre>
这里的NoUnderlineSpan继承了URLSpan而不是UnderlineSpan,URLSpan是ClickableSpan的子类。
有的时候我们需要自定义超链接点击事件,例如弹一个Toast,那么重写ClickableSpan:
public class Test10Activity extends Activity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test10);
textView = (TextView) findViewById(R.id.text);
String webLinkText = "我的博客";
SpannableString spStr = new SpannableString(webLinkText);
ClickableSpan clickSpan = new NoLineClickSpan(spStr.toString()); //设置超链接
spStr.setSpan(clickSpan, 0, spStr.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.append(spStr);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
private class NoLineClickSpan extends ClickableSpan {
String text;
public NoLineClickSpan(String text) {
super();
this.text = text;
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);
ds.setUnderlineText(false); //去掉下划线
}
@Override
public void onClick(View widget) {
processHyperLinkClick(text); //点击超链接时调用
}
}
private void processHyperLinkClick(String text){
Toast.makeText(this,text,Toast.LENGTH_SHORT).show();
}
}










