2011-08-02 89 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());