2016-09-23 67 views
1

我想讓textview中的所有鏈接都可點擊。如何在textview中創建所有3種類型的鏈接

的示例文本是:

"All three should link out http://google.com and <a href="http://google.com">here link</a> and <a href="http://google.com">http://google.com</a>" 

如果我使用MovementMethod與HTML文本,只有第二和第三鏈接點擊。 如果我使用Linkify(或混合使用),只有第一和第二鏈接是可點擊的。

如何讓所有人都可以點擊?

回答

0

在投訴後,我發現Linkify.addLinks()方法從文本中刪除當前跨度並應用一次新的(基於例如網頁url)。因爲我的跨度從Html.fromHtml()在開始時被刪除,並且從不再次塗抹。

所以我做了以下內容:
1.從htmml Html.fromHtml中讀取文本,它給了我Spanning obj與html跨度。
2.保存從HTML跨越陣列
3.進行linkify.addLinks - 這種方法刪除我的舊的跨度,所以我將不得不重新添加
4.添加舊跨度
5.設置文本TextView的。

實現:

private void setLabel(){  
    label.setText(linkifyHTML(Html.fromHtml("text with links here")); 
    label.setMovementMethod(LinkMovementMethod.getInstance()); 
    label.setLinkTextColor(getRes().getColor(R.color.link)); 
} 
    private Spannable linkifyHTML(CharSequence text) { 
     Spannable s = new SpannableString(text); 

     URLSpan[] old = s.getSpans(0, s.length(), URLSpan.class); 
     LinkSpec oldLinks[] = new LinkSpec[old.length]; 

     for (int i = 0; i < old.length; i++) { 
      oldLinks[i] = new LinkSpec(old[i], s.getSpanStart(old[i]), s.getSpanEnd(old[i])); 
     } 

     Linkify.addLinks(s, Linkify.ALL); 
     for (LinkSpec span : oldLinks) { 
      s.setSpan(span.span, span.start, span.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     return s; 
    } 

    class LinkSpec { 
     final URLSpan span; 
     final int start, end; 

     public LinkSpec(URLSpan urlSpan, int spanStart, int spanEnd) { 
      span = urlSpan; 
      start = spanStart; 
      end = spanEnd; 
     } 
    } 
0

您必須使用反斜槓\才能看到"字符,因此字符串不會將其視爲字符串的最後一個點。我的意思是,當所有文字都在兩個""之內時,會考慮一個字符串。你必須在你的url中查看"個字符,因爲如果不是這個字符串,當他發現一個新的"字符時,就會認爲它必須結束,在這個例子中你的url。

"All three should link out http://google.com and <a href=\"http://google.com\">here link</a> and <a href=\"http://google.com\">http://google.com</a>" 
相關問題