在Android中制作超链接textview


80

我想链接一个Textview文本,例如Google。无论如何有这样的链接。(ie)在点击Google一词时,应打开相应的链接。任何想法都欢迎。




1
只需使用Linkify.addLinks(TextView,Linkify.ALL);
AndroidGeek

Answers:


134

试试这个,让我知道会发生什么..

使用Java代码:

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));

从API级别> = 24开始Html.fromHtml(String source)不推荐使用fromHtml(String, int)

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

或在布局xml文件中的TextView小部件属性内

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

我得到了预期的输出。感谢您的答复
Srinivas

1
如果strings.xml中存在超链接文本,则所有建议的答案均无效。它以非常奇怪的方式工作。如果我直接在布局xml中设置文本,则可以使用,但是当我在java代码中设置textview数据时,则无法使用。
Velu

2
只需提及,如果您使用Java代码,则需要android:autoLink="web"从XML中删除。我两者都有,但没有用。
ΑntonisPAPADAKIS

53

使用android:autoLink="web"在你的TextView中的XML。它应该自动转换可点击的网址(如果在文本中找到)


14
还包括android:linksClickable =“ true”
Ajith Memana 2013年

在这种情况下,@ waqaslam放置了链接。
加格的

1
@Garg

28

所有经过测试且可以正常工作的100%
解决方案:android:autoLink="web"
以下是完整的示例

样例布局 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.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>

3
如果我更改此行> cleverfinger.com.au/user-guide/ </a> </ string >,对于像这样的不同文本
不起作用

2
仅当文本包含完整的URL,例如:www.something.com
Rahul Tiwari,


5

注意:-Html.fromHtml在Android N中已弃用

您需要检查和支持Android N更高版本的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>"));
                }
 

或者

您可能不想通过id在TextView上添加autoLink标志。

android:autoLink =“ web”

android:linksClickable =“ true”

这样,您无需添加<a href='somelink'>标签。

这是一个缺点,如果您想添加hyperlink一个text,则无法采用这种方式。例如,您不能做这样的事情:-[ 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" />

两种方法的结果:

https://github.com/hiteshsahu


1

对于fromHtml不建议使用最新版本的SDK ,请在下面的行中使用

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));
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.