从TextView中的链接中删除下划线
  我使用两个textview显示来自数据库的链接,我设法改变链接的颜色,但我想删除下划线 
email.setText(c.getString(5));
    website.setText(c.getString(6));
    Linkify.addLinks(email, Linkify.ALL);
    Linkify.addLinks(website, Linkify.ALL);
我可以用XML或Code做到吗?
  您可以在代码中使用不带下划线的版本查找和替换URLSpan实例。  在调用Linkify.addLinks() ,调用下面粘贴在每个TextView上的stripUnderlines()函数: 
    private void stripUnderlines(TextView textView) {
        Spannable s = new SpannableString(textView.getText());
        URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
        for (URLSpan span: spans) {
            int start = s.getSpanStart(span);
            int end = s.getSpanEnd(span);
            s.removeSpan(span);
            span = new URLSpanNoUnderline(span.getURL());
            s.setSpan(span, start, end, 0);
        }
        textView.setText(s);
    }
这需要URLSpan的定制版本,该版本不启用TextPaint的“下划线”属性:
    private class URLSpanNoUnderline extends URLSpan {
        public URLSpanNoUnderline(String url) {
            super(url);
        }
        @Override public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setUnderlineText(false);
        }
    }
给定一个textView和内容:
TextView textView = (TextView) findViewById(R.id.your_text_view_id);
String content = "your <a href='http://some.url'>html</a> content";
这里是一个简洁的方法来删除超链接的下划线:
Spannable s = (Spannable) Html.fromHtml(content);
for (URLSpan u: s.getSpans(0, s.length(), URLSpan.class)) {
    s.setSpan(new UnderlineSpan() {
        public void updateDrawState(TextPaint tp) {
            tp.setUnderlineText(false);
        }
    }, s.getSpanStart(u), s.getSpanEnd(u), 0);
}
textView.setText(s);
这是基于robUx4建议的方法。
为了使链接可点击,您还需要致电:
textView.setMovementMethod(LinkMovementMethod.getInstance());
  UnderlineSpan已经存在,但只能设置下划线。 
  另一个解决方案是在每个现有的URLSpan上添加一个没有下划线的跨度。  因此,下划线状态在绘画之前被禁用。  通过这种方式,您可以将URLSpan (可能是自定义)类和其他所有其他样式设置在别处。 
public class NoUnderlineSpan extends UnderlineSpan {
    public NoUnderlineSpan() {}
    public NoUnderlineSpan(Parcel src) {}
    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setUnderlineText(false);
    }
}
您可以在不移除现有的URLSpan对象的情况下设置它:
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span: spans) {
    int start = s.getSpanStart(span);
    int end = s.getSpanEnd(span);
    NoUnderlineSpan noUnderline = new NoUnderlineSpan();
    s.setSpan(noUnderline, start, end, 0);
}
上一篇: Remove underline from links in TextView
下一篇: How to update the source location in symbol (.pdb) files
