2010-07-08 74 views
13

我有一個問題:如何在正常文本的文本塊中放置超鏈接?我有一些文本,並在文本中提到了一個URL,我希望這個URL使用不同的顏色,加下劃線和點擊。Android中的超鏈接

我知道在Android中的超鏈接,可以放置「Linkify」 .. 和我剛纔提到 android docs

考慮使用「機器人文檔」同上面的段落,我想在android系統顯示.... 。

回答

14

@Fedor .... 我發現該鏈接來自 API Demos

該方法最後被用於在段落文本之間給出鏈接。

 SpannableString ss = new SpannableString("text4: Click here 
                to dial the phone."); 

    ss.setSpan(new StyleSpan(Typeface.ITALIC), 0, 6, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    ss.setSpan(new URLSpan("tel:4155551212"), 13, 17, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    TextView t4 = (TextView) findViewById(R.id.TextView01); 
    t4.setText(ss); 
    t4.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

我們可以設置一個本地化的spannablestring嗎? – Manohar 2012-07-24 16:47:43

1

看看那個TextView underline phone number and hyperlink

但我可以看到Linkify不能提供你所需要的功能。沒問題,你可以手動實現它。只需添加ClickableSpans並單擊即可。此處的代碼示例http://www.orangeapple.org/?p=354

+0

雅這是正確的「Linkify」的WebURLs ... 但「Android的文檔」應爲紐帶,當這個鏈接,用戶點擊然後Tager的URL應該被開除,相同的HTML錨標籤 爲如。 Android Docs 2010-07-08 13:46:57

+0

還有一個辦法補充。 – Fedor 2010-07-08 16:37:46

+0

thanx的答案.....真的很有幫助 – 2010-07-09 04:08:27

5

@PM - 我認爲你正在尋找爲Android定製linkify,我希望這將有助於你得到你想要http://android-geek.blogspot.com/2011/04/linkify-text-in-android.html

+0

+1,亞巴拉特這個例子也是最好的。 – 2011-04-15 09:01:51

+0

+1此解決方案適用,但我希望在android中創建簡單的超鏈接更簡單! – 2011-07-21 19:52:33

+0

優秀的鏈接,我會盡快嘗試 – 2012-05-09 12:40:00

0

我知道這是一個老問題是什麼,但是這是一個問題我最近苦苦掙扎,並且沒有找到幫助我的StackOverflow答案。所以經過大量的實驗後,我找到了解決辦法,並認爲我會分享它的後代。

在strings.xml,使用HTML標籤和標記:

<string name="example"><![CDATA[I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string> 

在你的XML,確保不添加任何特殊屬性。不要使用Android:自動連接

在Java代碼中,你必須使用fromHtml,Linkify和LinkMovementMethod。請務必LinkMovementMethod之前調用Linkify

exampleTextView.setText(Html.fromHtml(getString(R.string.example))); 
Linkify.addLinks(exampleTextView, Linkify.WEB_URLS); 
exampleTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

另一個警告:如果您使用的這些HTML鏈接,其中一個鏈接具有不匹配的URL顯示文本(谷歌和www.google.com),不要放字符串中的原始URL。所以:

<string name="example"><![CDATA[www.google.com I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string> 

會變成「www.google.com」到鏈接,但不會變成「機器人文檔」變成了鏈接。

這是非常令人沮喪,我要弄清楚,我嘗試了許多不同的組合,隨後許多網上的例子,其中沒有工作,直到我發現,只有上述正確的魔法組合。希望它可以幫助別人!

0

Use Spannable String

private void setTermsAndTextToClickable(TextView tandcTextView, String termsAndCon, String wordTohyperLink, String termsAndConUrl){ 
    if (TextUtils.isEmpty(termsAndCon)){ 
     tandcTextView.setVisibility(View.GONE); 
     return; 
    } 

    if (!TextUtils.isEmpty(termsAndCon) && !TextUtils.isEmpty(wordTohyperLink) && !TextUtils.isEmpty(termsAndConUrl)){ 
     SpannableString ssString = new SpannableString(termsAndCon); 
     int startLoc = termsAndCon.indexOf(wordTohyperLink); 
     int endLoc = termsAndCon.indexOf(wordTohyperLink) + wordTohyperLink.length(); 
     ssString.setSpan(new URLSpan(termsAndConUrl),startLoc,endLoc, 0); 
     tandcTextView.setText(ssString); 
     tandcTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

     ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View widget) { 
       // We display a Toast. You could do anything you want here. 
       Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show(); 

      } 
     }; 
     ssString.setSpan(clickableSpan, startLoc, endLoc, 0); 
    }else{ 
     tandcTextView.setText(termsAndCon); 
    } 

}