TextView中url的Android活动链接

时间:2011-08-02 10:35:59

标签: android url textview

我从Web服务获取动态文本并在TextView中显示相同内容。有时,TextView的网址类似于<a href="http://hello.com">hello</a>。我使用以下代码设置了文本。

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

并在包含android:autoLink="web"的相应xml中设置TextView。现在链接显示正确的蓝色和下划线,但我发现它只是一个死链接。如果我们试图点击它,什么也没发生。我需要做些什么才能使链接生效?

10 个答案:

答案 0 :(得分:136)

重新审视所有解决方案之后,总结一些解释:

android:autoLink="web" 
即使未设置android:linksClickable,

也会找到一个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>

要通过代码设置链接,原理相同,不需要模式或android:布局中的自动链接,使用Linkify自动找到链接:

  final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView);
  myClickableUrl.setText("Click my web site: www.stackoverflow.com");
  Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS);

答案 1 :(得分:36)

这对我有用:

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

答案 2 :(得分:14)

要保存任何一次真正的解决方案

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

我使用它并且它完美无缺

答案 3 :(得分:6)

有两种情况:

  • 文字看起来像"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,并为点击指定链接移动方法:

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

答案 4 :(得分:5)

看看这种方法:

String text = "Visit stackoverflow.com";
TextView label = new TextView(this);
label.setText(text);
Pattern pattern = Pattern.compile("stackoverflow.com");
Linkify.addLinks(label, pattern, "http://");

答案 5 :(得分:3)

我已经知道我找到了它

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>  

答案 6 :(得分:2)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

将这些代码行添加到textView文件中的xml中,它将非常正常。

android:autoLink="web" android:textColorLink="@android:color/holo_orange_dark" android:linksClickable="true"

或者如果要在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

享受...

答案 9 :(得分:0)

Answer是正确的,但是没有完成,因为我在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文本有效,而不对链接的可单击文本无效。