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.
-
Duplicate: http://stackoverflow.com/questions/2116162/how-to-display-html-in-textview – m0skit0 Feb 15 '12 at 09:21
-
http://stackoverflow.com/questions/3204036/hyperlink-in-android – Samir Mangroliya Feb 15 '12 at 09:23
-
1just use Linkify.addLinks(TextView, Linkify.ALL); – Zar E Ahmer Jul 14 '14 at 06:26
7 Answers
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"

- 108,599
- 23
- 164
- 151
-
1
-
4If the hyperlink text is present in strings.xml then none of the suggested answers are working. It works in very weird way. If I set the text directly in layout xml it works, but when I set the textview data in java code it doesn't work. – AndroidDev Dec 10 '19 at 05:43
-
4Just to mention that if you use the Java code you need to remove `android:autoLink="web"` from XML. I had both and it didn't work. – Αntonis Papadakis Mar 28 '20 at 21:30
-
2@Velu you must surround the string with `<![CDATA[string]>>` where string is your whole string text with a ulr. Was trying to fix this for an hour... – Vojtěch Hořánek Sep 01 '21 at 12:17
use android:autoLink="web"
in your TextView's xml. It should automatically convert urls click-able (if found in text)

- 67,549
- 16
- 165
- 178
-
21
-
-
2@Garg's It's the text you set on textview that may contain hyperlinks – waqaslam May 05 '16 at 17:53
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:support@cleverfinger.com.au?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>

- 7,846
- 14
- 53
- 103

- 2,078
- 1
- 20
- 16
-
3It doesn't work if i change this line >http://www.cleverfinger.com.au/user-guide/ for a diferent text like: Click here – Musculaa Apr 15 '14 at 16:57
-
2this works only if text contains full URL like : www.something.com – Rahul Tiwari Aug 12 '15 at 12:57
This can also be done by using the default property of Textview
android:autoLink="email"

- 832
- 8
- 20
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:-

- 1
- 1

- 41,955
- 17
- 205
- 154
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));
}

- 1,875
- 22
- 40
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.

- 3,162
- 3
- 25
- 17