Android在TextVi中的url的活动链接

我从Web服务获取动态文本,并在TextView中显示该文本。 有时TextView的网址类似android:autoLink="web"。我使用以下代码设置了文本。

textView.setText(Html.fromHtml(sampletext));

并在包含TextView的相应xml中设置android:autoLink="web"。现在该链接正确显示为蓝色和下划线,但是我发现它只是一个无效的链接。 如果我们尝试单击,则没有任何反应。 我必须做些什么才能使链接处于活动状态?

dev_android asked 2019-11-18T13:13:00Z
10个解决方案
142 votes

回顾所有解决方案后,请附上一些说明的摘要:

android:autoLink="web" 

即使未设置android:linksClickable,它也会找到一个URL并创建一个链接,默认情况下,链接是可单击的。 您不必单独保留URL,即使在文本中间也可以检测到该URL并单击它。

<TextView
    android:text="My web site: www.stackoverflow.com"
    android:id="@+id/TextView1"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:autoLink="web">
</TextView>

要以相同的原理通过代码设置链接,而无需在布局中使用pattern或android:autoLink,则可以使用Linkify自动找到该链接:

  final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView);
  myClickableUrl.setText("Click my web site: www.stackoverflow.com");
  Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS);
L. G. answered 2019-11-18T13:13:26Z
36 votes

这对我有用:

<TextView
    android:text="www.hello.com"
    android:id="@+id/TextView01"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:autoLink="web">
</TextView>
Vinayak Bevinakatti answered 2019-11-18T13:13:46Z
14 votes

要节省一次,真正的解决方案是

    <TextView
    android:text="www.hello.com"
    android:id="@+id/TextView01"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:autoLink="web"
    android:linksClickable="true">
</TextView>

我用它,它工作完美

M.Ali El-Sayed answered 2019-11-18T13:14:18Z
6 votes

有两种情况:

  • 文本看起来像"click on http://www.hello.com"

那么您只需要在xml中设置autoLink属性,即可在文本中自动检测到链接:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="web"
    android:text="click on http://www.hello.com"/>
  • 文本看起来像click on <a href="http://hello.com">hello</a>

那么您必须通过代码完成操作,并告诉文本为html,然后为点击指定一种Link移动方法:

    String text = "click on <a href=\"http://hello.com\">hello</a>";
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(Html.fromHtml(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());
Arnaud SmartFun answered 2019-11-18T13:15:17Z
5 votes

看看这种方法:

String text = "Visit stackoverflow.com";
TextView label = new TextView(this);
label.setText(text);
Pattern pattern = Pattern.compile("stackoverflow.com");
Linkify.addLinks(label, pattern, "http://");
Sherif elKhatib answered 2019-11-18T13:15:43Z
3 votes

我已经给出了一些发现的想法

TextView tv = ( TextView ) findViewById( R.id.link );  
    WebView wv = ( WebView ) findViewById( R.id.webView );  
    URLSpan[] urlSpans = tv.getUrls();  
    for ( URLSpan urlSpan : urlSpans )  
    {  
        wv.loadUrl( urlSpan.getURL() );  
    }  

string.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
  <string name="app_name">Hello, Android</string>  
  <string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string>  
</resources> 

main.xml中

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        >  

  <TextView  
          android:id="@+id/link"  
          android:layout_width="wrap_content"  
          android:layout_height="wrap_content"  
          android:autoLink="all"  
          android:linksClickable="true"  
          android:text="@string/link" />  

  <WebView  
          android:id="@+id/webView"  
          android:layout_width="fill_parent"  
          android:layout_height="wrap_content"  
          android:layout_weight="1.0" />  

</LinearLayout>  
Pratik answered 2019-11-18T13:16:21Z
2 votes

在XML中,您需要在TextView中添加android:linksClickable="true"

LuxuryMode answered 2019-11-18T13:16:46Z
0 votes

如果要在textview中显示strings.xml中的字符串,则包含Web链接的字符串不应包含单词“ a href =“。 如果从strings.xml文件中删除了这些单词,则该链接将起作用。

Dharam Jindal answered 2019-11-18T13:17:14Z
0 votes

将这些代码行添加到xml文件中的textview文件中,它将很好地工作。

textview

或者,如果要在textview中创建自己的链接,请在您的java文件中添加以下代码行

  final SpannableString s = new SpannableString("https://play.google.com/store/apps/details?id=cn.wps.moffice_eng");
  Linkify.addLinks(s, Linkify.ALL);

通过功能在您的textview中设置此's'字符串

Textview.setText(s);

并且不要忘记添加此行

 ((TextView)findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());

id将是您的textview id

请享用 ...

Tarun Grover answered 2019-11-18T13:18:25Z
0 votes

答案是正确的,但还不完整,因为我在xml中有其他答案(如autoLink和linksClickable和编程方式)的某些属性不起作用。 另外,当我从字符串资源中传递带有html的字符串时,它也不起作用,因此请当心,您必须清理xml并直接按照该答案直接传递字符串。

    String text = "click on <a href=\"http://hello.com\">hello</a>";
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(Html.fromHtml(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());

没有LinkMovementMethod我就没有尝试过,但是现在我可以了,因为它终于可以工作了。 其他答案对我不起作用,或者对可见的URL文本有效,而不对链接的可单击文本有效。

Renetik answered 2019-11-18T13:19:03Z
translate from https://stackoverflow.com:/questions/6910703/android-active-link-of-url-in-textview