从TextView中的链接中删除下划线-Android

我正在使用两个textview来显示数据库中的链接,我设法更改了链接颜色,但是我想删除下划线


email.setText(c.getString(5));

    website.setText(c.getString(6));

    Linkify.addLinks(email, Linkify.ALL);

    Linkify.addLinks(website, Linkify.ALL);

我可以从XML或代码中做到这一点吗?


摇曳的蔷薇
浏览 857回答 3
3回答

慕侠2389804

您可以通过查找URLSpan实例并将实例替换为不带下划线的版本,从而在代码中做到这一点。调用后Linkify.addLinks(),stripUnderlines()在每个上调用下面粘贴的函数TextView:    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);        }    }

慕斯王

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);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android