2011-08-02 60 views
33

我从Web服务获取动态文本并在TextView中显示相同内容。有时TextView具有像<a href="http://hello.com">hello</a>的URL。我使用下面的代码设置了文本。TextView中URL的Android活动链接

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

而且也是在包含TextView相应的XML设置android:autoLink="web"。现在链接以蓝色和下划线正确显示,但我发现它只是一个死链接。如果我们尝试点击它,没有任何事情发生。我必须做些什么才能使链接处于活动状态?

+2

你好dalandroid,我是当然,但我认为你应该设置textView OnClick事件。并在onClick上放置链接代码。试试看,我不确定它可能会对你有所帮助。谢谢。 – anddev

+0

具有u在android系统 –

+0

@Avi库马尔曼梏雅提到上网权限...想必 –

回答

90

重新审视所有的解决方案,具有一定的解释汇总后:

android:autoLink="web" 

会找到一个URL并创建一个链接,即使android:linksClickable没有设置,链接默认是可点击的。您不必单独保留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> 

要通过代码,同样的原理,不需要图案或机器人设置链接:在布局自动链接,该链接被自动发现使用Linkify:

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

是的,链接默认为可点击,谢谢。 –

+1

由于其做工精细,如何在网页视图加载 – Prasad

+1

回答上述不符合Web视图,如果你想使用一个Web视图只是你的HTML加载到你的网页流量。 –

34

这个工作对我来说:

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

我使用这个...但它是与蓝色和下划线的文字给予,但我发现它只是一个死链接。没有点击行为正在发生。这是我的问题。 –

+0

我知道这是旧的,你需要设置可点击的真实定义的onclick功能 – user173488

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

在string.xml链路串标签值,确保你逃避以下字符,否则该项目可能无法建立。 &更改为& <变化<>变化到> – hyena

4

退房这种做法:

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

什么是Linkify? –

+3

@StealthRabbi'import android.text.util.Linkify;' –

+0

哦,我认为这是一些第三方的lib。谢谢。 –

2

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

12

保存任何一次真正的解决办法是

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

我用它和它的工作完美

+0

谢谢。它工作完美。 – Rooney

+7

如果我们希望文本与实际url不同,该怎么办? :P – Blaise

0

有两种情况:

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

日恩,你只需要设置在XML中自动链接属性,这样的链接的文本会自动检测:

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