Search code examples
androidhyperlinktextview

Android: textview hyperlink


I know that if you put a link in a textview it will work but if I want to display for example:

google stackoverflow

and not the whole link(just the tag) How do i make those links clickable?


Solution

  • You could have two separate TextViews and you could align them accordingly in your layout if needed:

        Text1.setText(
            Html.fromHtml(
                "<a href=\"http://www.google.com\">google</a> "));
        Text1.setMovementMethod(LinkMovementMethod.getInstance());
    
        Text2.setText(
                Html.fromHtml(
                    "<a href=\"http://www.stackoverflow.com\">stackoverflow</a> "));
        Text2.setMovementMethod(LinkMovementMethod.getInstance());
    

    Then if you want to strip the "link underline". Create a class:

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

    Then add this method in your main Activity class where you have the 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);
    }
    

    And then just call this after you initialised the TextViews (in your onCreate):

    stripUnderlines(Text1);
    stripUnderlines(Text2);