Remove underline from links in TextView - Android Remove underline from links in TextView - Android android android

Remove underline from links in TextView - Android


You can do it in code by finding and replacing the URLSpan instances with versions that don't underline. After you call Linkify.addLinks(), call the function stripUnderlines() pasted below on each of your TextViews:

    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);    }

This requires a customized version of URLSpan which doesn't enable the TextPaint's "underline" property:

    private class URLSpanNoUnderline extends URLSpan {        public URLSpanNoUnderline(String url) {            super(url);        }        @Override public void updateDrawState(TextPaint ds) {            super.updateDrawState(ds);            ds.setUnderlineText(false);        }    }


Given a textView and content:

TextView textView = (TextView) findViewById(R.id.your_text_view_id);String content = "your <a href='http://some.url'>html</a> content";

Here is a concise way to remove underlines from hyperlinks:

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);

This is based on the approach suggested by robUx4.

In order to make the links clickable you also need to call:

textView.setMovementMethod(LinkMovementMethod.getInstance());


Here is Kotlin extension function:

fun TextView.removeLinksUnderline() {    val spannable = SpannableString(text)    for (u in spannable.getSpans(0, spannable.length, URLSpan::class.java)) {        spannable.setSpan(object : URLSpan(u.url) {            override fun updateDrawState(ds: TextPaint) {                super.updateDrawState(ds)                ds.isUnderlineText = false            }        }, spannable.getSpanStart(u), spannable.getSpanEnd(u), 0)    }    text = spannable}

Usage:

txtView.removeLinksUnderline()