我想做一个文本视图文本如 谷歌的链接。有没有什么方法可以把它们联系起来。(即)点击 Google 这个单词时,应该打开适当的链接。任何想法都欢迎。
use android:autoLink="web" in your TextView's xml. It should automatically convert urls click-able (if found in text)
android:autoLink="web"
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),
Html.fromHtml(String source)
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"
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>
This can also be done by using the default property of Textview
android:autoLink="email"
Note :- Html.fromHtml is deprecated in Android N
You need to do check and support Android N and higher versions of Android
Android N
//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:linksClickable="true"
This way You don't need to add <a href='somelink'> tags.
<a href='somelink'>
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]
hyperlink
text
<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
For Latest version of SDK fromHtml is deprecated Use below line
fromHtml
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)); }
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.