android: Set link with <a href> in TextView
Solution 1
I finally got it working using the following code :
TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
tv1.setText(Html.fromHtml("<a href=\""+ l.getRightString() + "\">" + l.getLeftString() + "</a>"));
tv1.setClickable(true);
tv1.setMovementMethod (LinkMovementMethod.getInstance());
dialogLayout.addView(tv1);
l.getRightString() - contains a url like http:\www.google.com l.getLeftString() - contains text for the url like "Go to Google"
RESULTS : Text "Go to Google" on my dialog with blue color and underlined, and on clicking it the browser opens up and shwows the respective page. On returning/Exiting the browser it again comes to the app from the state where it had left.
Hope this helps.
Solution 2
Save your html in a string
<string name="link"><a href="http://www.google.com">Google</a></string>
Set textview ID to to
textViewLinkable
In main activity use following code:
((TextView) findViewById(R.id.textViewLinkable)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.textViewLinkable)).setText(Html.fromHtml(getResources().getString(R.string.link)));
Solution 3
Here is my simple implementation tested up to Android N.
String termsText = "By registering, you are agree to our";
String termsLink = " <a href=https://www.yourdomain.com/terms-conditions.html >Terms of Service</a>";
String privacyLink = " and our <a href=https://www.yourdomain.com/privacy-policy.html >Privacy Policy</a>";
String allText = termsText + termsLink + privacyLink;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText, Html.FROM_HTML_MODE_LEGACY));
}
else {
((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText));
}
Solution 4
I was also facing the same issue I resolved using following
String str_text = "<a href=http://www.google.com >Google</a>";
TextView link;
link = (TextView) findViewById(R.id.link);
link.setMovementMethod(LinkMovementMethod.getInstance());
link.setText(Html.fromHtml(str_text));
for changing the link color to blue use
link.setLinkTextColor(Color.BLUE);
Solution 5
txtview.setMovementMethod(LinkMovementMethod.getInstance());
Pass this statement to your textview, and in string.xml set an string as
<string name="txtCredits"> <a href="http://www.google.com"></a></string>
Now pass this string name " android:text="@string/txtCredits" to your xml class where the txtview is there .
Tvd
Updated on June 14, 2020Comments
-
Tvd almost 4 years
I create a TextView dynamically and want to set the text as linkable. Text value is "Google". I referred to internet & blogs like this, which shows the same way, but I couldn't produce the expected results.
I tried different ways, but the output I see is the whole text with text only. The code I have tried with is :
TextView tv1 = new TextView(this); tv1.setLayoutParams(textOutLayoutParams); // Make Linkable tv1.setMovementMethod(LinkMovementMethod.getInstance()); tv1.setText(Html.fromHtml(l.getLeftString())); /*SpannableString s = new SpannableString(l.getLeftString()); Linkify.addLinks(s, Linkify.WEB_URLS); tv1.setText(s); tv1.setMovementMethod(LinkMovementMethod.getInstance()); */ dialogLayout.addView(tv1);
In my output I see "Google" and no link. I also tried Clean project & building it again, but no success. I am looking to see only "Google" as underlined with blue color (as default) and on clicking Google, the browser open with http://google.com.
What is lacking in my code to get the output ? BTW For REF : I use 64bit Win 7, Java, Eclipse, Android API 8-2.2
Any help is highly appreciated.
-
Tvd over 11 yearsItried String s = "<a href=\"google.com\">Google</a>"; tv1.setMovementMethod(LinkMovementMethod.getInstance()); tv1.setText(Html.fromHtml(s)); and what I see is "<a href="google.com">Google</a>" Again no actual anchor link.
-
Tvd over 11 years@SquireaSquire, I have tested on Emulator only of Api 2.2 & 4.1.
-
SquiresSquire over 11 years@Tvd i have this code in my own app and it displays a normal link (blue underline, onclick goes to website)
-
Tvd over 11 yearsWhat is ur system config & which API r u using
-
SquiresSquire over 11 years@Tvd windows 7 emulator - 2.0, Nexus S 4.1 [Jellybean], Xperia Play 2.1
-
Tvd over 11 yearsI am on Win 7 x64. Tried on emulator 2.2 & 4.1 API 8. The code that I got, works on both emulator versions.
-
Tvd over 11 yearsYrs it works with the code I added as answer. No other way was workable except this one.
-
AlvaroSantisteban almost 11 yearsIn my case, the setClickable(true) is not needed. But if I try to add the link with an append() to another text, it does not work :S
-
Gelldur about 9 yearsImportant. Do not set android:autoLink="web" because with that it doesn't work!
-
Rakeeb Rajbhandari over 8 years@DawidDrozd that is very important indeed. Thanks mate, you saved me from killing myself :)
-
Jade over 8 yearsThe key is the
Html.fromHtml(...)
that returns aSpanned
-
Opus1217 about 8 yearsI read and tried many other solutions; this is the only one that worked for me in following map links. btw, use urlEncoder to encode your addresses - it works like a charm.
-
ivanleoncz almost 7 yearsThe best solution that I found so far. Thanks!
-
Kenneth Saey almost 6 yearsAs @DawidDrozd mentioned you should not combine setMovementMethod with android:autoLink="web" (or any value), but as an extra note: I wasn't using the autoLink property but Linkify.addLinks(spannableString, Linkify.ALL) instead. This is the same, so don't combine those either!
-
Dewsworld almost 5 yearsThis is a clean answer
-
Melaku Minas Kasaye over 3 yearsOf all the answers on this site yours is the perfect one.