Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can TextView autoLink and setMovementMethod both be made to work

Tags:

android

A number of discussions on here going back years related to getting hyperlinks to work in a TextView. The conclusion is that autoLink works for parsing out URLs that are simply embedded in the text, e.g., "go to www.google.com". Then there is

setMovememtMethod(LinkMovementMethod.getInstance()); 

that will cause actual HTML tags to work, e.g. <a href="http://www.google.com">go to Google</a>. However, using the latter causes autoLink to not work in the same view.

My issue is that I am displaying text that is supplied by a user database, so I have no control over the formatting. In some cases, this text has plaintext links while in others it is entered as HTML tags. Is there any way to get both types of links to work at the same time?

like image 279
gordonwd Avatar asked Jan 01 '26 10:01

gordonwd


1 Answers

Both plain text links & links with HTML tags will work with the below code

TexView in xml

<TextView
android:id="@+id/txt_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textColorLink="#06b" />

Here in activity.java

String text = "this is the link with anchor tag <a href=\"http://www.google.com\">Google</a>. here is the plain text link http://www.google.com";
    TextView textView = (TextView) findViewById(R.id.txt_view);
    textView.setText(getParsedLinks(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());

instead of using android:autoLink="all" in xml or Linkify.addLinks(textView, Linkify.ALL) use Linkify.addLinks to SpannableString as in below method

SpannableString getParsedLinks(String txt){
    Spanned span = Html.fromHtml(txt);
    URLSpan[] urlSpans = span.getSpans(0, span.length(), URLSpan.class);
    SpannableString s = new SpannableString(span);
    Linkify.addLinks(s, Linkify.ALL);
    for (URLSpan urlSpan : urlSpans) {
        s.setSpan(urlSpan, span.getSpanStart(urlSpan), span.getSpanEnd(urlSpan), 0);
    }
    return s;
}
like image 85
user4551037 Avatar answered Jan 05 '26 10:01

user4551037



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!