Make a hyperlink textview in android

AndroidUrlHyperlinkTextview

Android Problem Overview


I want to make a link for a textview text like Google. Is there anyway to make link like this. (i.e) When clicking on the word Google it should open the appropriate link. Any ideas are welcome.

Android Solutions


Solution 1 - Android

Try this, and let me know what happen..

Using java code:

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

From API level >= 24 onwards Html.fromHtml(String source) is deprecated instead use fromHtml(String, int),

textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));

Or in layout xml file, inside your TextView widget attributes

android:autoLink="web"
android:linksClickable="true"
									

Solution 2 - Android

use android:autoLink="web" in your TextView's xml. It should automatically convert urls click-able (if found in text)

Solution 3 - Android

All tested and working 100%
Solution: android:autoLink="web"
below is a complete example

Sample Layout Xml

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

String in string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>

Solution 4 - Android

This can also be done by using the default property of Textview

android:autoLink="email"

Solution 5 - Android

Note :- Html.fromHtml is deprecated in Android N

You need to do check and support Android N and higher versions of Android

                  //Set clickable true
                 tagHeading.setClickable(true);
                 
                  //Handlle click event
                  tagHeading.setMovementMethod(LinkMovementMethod.getInstance());

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
                } else {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
                }
 

Alternatively

You can don't want to id programmatically add autoLink flag on TextView.

> android:autoLink="web" > > android:linksClickable="true"

This way You don't need to add <a href='somelink'> tags.

Which is a disadvantage, if you want to add hyperlink on a text you can't do it this way. eg you can't do something like this:- [hiteshsahu][1]

           <TextView
                android:id="@+id/tag_info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tag_ll"
                android:layout_gravity="left"
                android:layout_margin="10dp"
                android:autoLink="web"
                android:linksClickable="true"
                android:text="https://github.com/hiteshsahu"
                android:textColor="@color/secondary_text" />

The result from both approach:-

https://github.com/hiteshsahu

Solution 6 - Android

For Latest version of SDK fromHtml is deprecated Use below line

String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
    if (Build.VERSION.SDK_INT >= 24) {
        textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
    } else {
        textView.setText(Html.fromHtml(yourtext));
    }

Solution 7 - Android

I have made a following extension function of a textview.

@SuppressLint("SetTextI18n")
fun TextView.makeHyperLink(url: String) {
    text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml("<a href='${url}'>${text}</a>", Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml("<a href='${url}'>${text}</a>")
    }
    movementMethod = LinkMovementMethod.getInstance()
    isClickable = true
}

and calling it like this

tvTos.makeHyperLink(tos_url)

You can also pass text as a parameter.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSrinivasView Question on Stackoverflow
Solution 1 - Androiduser370305View Answer on Stackoverflow
Solution 2 - AndroidwaqaslamView Answer on Stackoverflow
Solution 3 - AndroidShanewajView Answer on Stackoverflow
Solution 4 - AndroidRishabh BhardwajView Answer on Stackoverflow
Solution 5 - AndroidHitesh SahuView Answer on Stackoverflow
Solution 6 - AndroidRohan PawarView Answer on Stackoverflow
Solution 7 - AndroidFarhanView Answer on Stackoverflow