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 TextView
s:
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()