How can I make links in fromHTML clickable? (Android)

30,717

Solution 1

As I assumed, the solution was trivial:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>"));
textView.setMovementMethod(LinkMovementMethod.getInstance());

The second line somehow activates the link behavior, although I'm not quite sure how. The same question is addressed over at Google Code.

Solution 2

As mentioned in other answers, a way forward is to use:

xtView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>"));
textView.setMovementMethod(LinkMovementMethod.getInstance());

However, this won't work if you have ANY android:autoLink value set, not just 'web' as other comments seem to suggest. So that means you can use this solution to linkify URLs at the expense of having phone, email and maps being disabled/unlinked.

Solution 3

The javadoc of the LinkMovementMethod says that it

Supports clicking on links with DPad Center or Enter.

So it makes sense that works that way.

And confirmed, with 4.2.2 works like charm with just the

textView.setMovementMethod(LinkMovementMethod.getInstance());

Solution 4

It should be this way:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>"));
textView.setAutoLinkMask(Linkify.WEB_URLS);
textView.setLinksClickable(true);

in XML should be

<TextView
    android:id="@+id/txtview"
    android:autoLink="web"
    android:linksClickable="true"
    />
Share:
30,717
Gunnar Lium
Author by

Gunnar Lium

Updated on July 19, 2020

Comments

  • Gunnar Lium
    Gunnar Lium almost 4 years

    This seems like a trivial problem, but is has me kind of stumped. I want to load an HTML string using Html.fromHtml(), and have any links in the string to be clickable and open in the browser.

    Basic example:

    textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>"));
    

    With this snippet, the text is formatted as if it were a link (blue, underlined), but it's not clickable. I tried Linkify, but it only seems to work with links that are not HTML-based.

    Any suggestions?

  • Gunnar Lium
    Gunnar Lium over 13 years
    I can't get this solution to work. Have you tried it? Seems to have the same issue of only linkifying "visible" links, not anchors with a different text.
  • Blundell
    Blundell about 13 years
    Note I tried this with referencing a String.xml resource. this WONT work. :-)
  • Artem Russakovskii
    Artem Russakovskii almost 13 years
    Use CDATA for strings.xml to avoid links in there to be treated at subtags.
  • Glenn.nz
    Glenn.nz over 11 years
    Just want to point out, if this isnt working for you, make sure you dont have the android:autoLink="web" tag in your textview xml, i removed mine and the links started working fine. EDIT: and it does work on 4.0+
  • MinceMan
    MinceMan almost 11 years
    Work on 4.1. I'm just pass straight html and I am not pulling strings from res.
  • wblaschko
    wblaschko over 9 years
    This is the the correct answer for situations where you're using Html.fromHtml(). It expands upon the selected answer.
  • Henrique de Sousa
    Henrique de Sousa over 8 years
    autoLink makes our app crash on some users (but we a 20 million userbase, so it's makes a difference)
  • Zach
    Zach over 7 years
    You should edit this to include that having the android:autoLink attribute set to anything will override the movement method
  • Shadow
    Shadow over 5 years
    Better answer than the chosen one, this addresses an issue that exists in case user has autoLink set.
  • James
    James over 4 years
    linksClickable is true by default
  • James
    James over 4 years
    linksClickable is true by default
  • Ben
    Ben almost 2 years
    You cannot use the binding: "binding.txt.setMovementMethod(...)", please cast into TextView to work: "TextView txt = binding.txt; txt.setMovementMethod(...)"