2012-03-24 61 views
40

我知道,如果你把一個鏈接在一個TextView它會工作,但如果我想顯示例如:安卓:TextView的超級鏈接

谷歌 計算器

,而不是整個環節(只是標籤) 如何讓這些鏈接可點擊?

+0

看看這個:http://stackoverflow.com/a/2746708/646391 – Emran 2012-03-24 13:44:34

+0

可能的重複[如何使TextView中的鏈接可點擊?](http:/ /stackoverflow.com/questions/2734270/how-do-i-make-links-in-a-textview-clickable) – CAMOBAP 2014-12-11 15:17:15

+0

這裏有幾個問題的答案打電話Html.fromHtml,並且要麼不爲超文本使用的strings.xml或混淆XML中的超文本(例如,「<」替換XML文件中的「<」)。這不必要地使事情複雜化。 AFAICT,最正確的答案應該是直接在strings.xml中鍵入HTML錨標記,請確保TextView的自動鏈接屬性沒有設置,然後使用setMovementMethod設置LinkMovementMethod。有幾個答案已經顯示如何做到這一點。 – 2015-11-06 22:53:49

回答

58

你可以有兩個獨立的TextViews,你可以在你的佈局,如果需要相應地調整他們:

Text1.setText(
     Html.fromHtml(
      "<a href=\"http://www.google.com\">google</a> ")); 
    Text1.setMovementMethod(LinkMovementMethod.getInstance()); 

    Text2.setText(
      Html.fromHtml(
       "<a href=\"http://www.stackoverflow.com\">stackoverflow</a> ")); 
    Text2.setMovementMethod(LinkMovementMethod.getInstance()); 

然後,如果你想要去除的「鏈接下劃線」。創建一個類:

public class URLSpanNoUnderline extends URLSpan { 
    public URLSpanNoUnderline(String url) { 
     super(url); 
    } 
    @Override public void updateDrawState(TextPaint ds) { 
     super.updateDrawState(ds); 
     ds.setUnderlineText(false); 
     } 
} 

然後在你的主Activity類,你有TextViews

private void stripUnderlines(TextView textView) { 
    Spannable s = new SpannableString(textView.getText()); 
    URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class); 
    for (URLSpan span: spans) { 
     int start = s.getSpanStart(span); 
     int end = s.getSpanEnd(span); 
     s.removeSpan(span); 
     span = new URLSpanNoUnderline(span.getURL()); 
     s.setSpan(span, start, end, 0); 
    } 
    textView.setText(s); 
} 

然後就是把這個你初始化的TextViews後(在你的onCreate)添加這個方法:

stripUnderlines(Text1); 
stripUnderlines(Text2); 
+1

注不起作用:這不是** **工作,如果你設置你的TextView的屬性自動鏈接到一些屬性!如果你有,你必須在調用setText() – Xebozone 2015-12-21 03:40:10

5

這應該工作。

TextView t2 = (TextView) findViewById(R.id.text2); 
t2.setMovementMethod(LinkMovementMethod.getInstance()); 

and 

<TextView android:layout_width="wrap_content" 
android:layout_height="wrap_content" android:text="@string/txtCredits" 
android:id="@+id/text2" 
android:layout_centerInParent="true" 
android:layout_marginTop="20dp"></TextView> 
+0

但我不想顯示整個鏈路 – 2012-03-24 13:59:52

+0

是和對於您可以包括這在你的字符串資源 <字符串名稱=「txtCredits」>Google。 – 2012-03-24 14:16:29

+0

我試試看!謝謝! – 2012-03-24 14:17:17

11

很簡單的方法來做到這一點---

在你Activity--

TextView tv = (TextView) findViewById(R.id.site); 
tv.setText(Html.fromHtml("<a href=http://www.stackoverflow.com> STACK OVERFLOW ")); 
tv.setMovementMethod(LinkMovementMethod.getInstance()); 

然後你會得到公正的標籤,而不是整個鏈接..

希望它會幫助你...

45
TextView t2 = (TextView) findViewById(R.id.textviewidname); 
t2.setMovementMethod(LinkMovementMethod.getInstance()); 

<string name="google_stackoverflow"><a href="https://stackoverflow.com/questions/9852184/android-textview-hyperlink?rq=1">google stack overflow</a></string> 

鏈接是「Android: textview hyperlink

和標記是「谷歌堆棧溢出」

定義您的Java中的第一個代碼塊和您的strings.xml文件中的第二個代碼塊。另外,請確保在您的java中引用來自頁面佈局的textView的id。

+2

之前調用'textView.setAutoLinkMask(0);'我最喜歡你的方式。恕我直言,這是最乾淨的。 – plackemacher 2012-07-23 21:19:19

+1

我很高興能爲您服務。 – epicness42 2012-07-24 00:16:11

+0

這適用於多個鏈接。 e.g <字符串名稱=「名」>示例:Link 1Link 2 Peter 2014-03-12 12:34:07

2

這是我的工作實現

private void showMessage() 
    { 

     lblMessage.setText(""); 

     List<String> messages = db.getAllGCMMessages(); 

     for (int k = messages.size() - 1; k >= 0; --k) 
     { 

      String message = messages.get(k).toString(); 
      lblMessage.append(message + "\n\n"); 

     } 
    Linkify.addLinks(lblMessage, Linkify.ALL); 
    } 

,並改變超鏈接的顏色,我editted我的XML來的TextView -

android:textColorLink="#69463d" 
2

我擊中了同樣的問題,並最終找到了可行的解決方案。

  1. 在字符串中。xml文件,定義:

    <string name="textWithHtml">The URL link is &lt;a href="http://www.google.com">Google&lt;/a></string> 
    

替換 「<」 小於字符的HTML轉義字符。

  • 在Java代碼:

    String text = v.getContext().getString(R.string.textWithHtml); 
    textView.setText(Html.fromHtml(text)); 
    textView.setMovementMethod(LinkMovementMethod.getInstance()); 
    
  • 然後將文本框會正確顯示與點擊的錨鏈接的文本

    7

    android:autoLink="web"只是工作,如果你有HTML中的完整鏈接。以下內容將以藍色和可點擊的形式突出顯示: