2016-02-25 55 views
12

我需要突出顯示並使文本中的url可動態地點擊。android分裂與空間不適合這種情況。爲什麼?

對於這一點,我使用下面的方法

private SpannableString addClickablePart(String string) { 


     string = string.replaceAll("\\n"," \n "); 

     string += " "; 
     SpannableString ss = new SpannableString(string); 
     String[] words = string.split(" "); 
     for (final String word : words) { 


      if (CommonUtilities.isValidURL(word)) { 


       int lastIndex = 0; 

       while(lastIndex != -1){ 

        lastIndex = string.indexOf(word+" ",lastIndex); 

        if(lastIndex != -1){ 
         ClickableSpan clickableSpan = new ClickableSpan() { 
          @Override 
          public void onClick(View textView) { 
           //use word here to make a decision 

           isRefreshingNecessary = false; 

           Intent mIntent = new Intent(ctx, UserWebsiteActivity.class); 
           mIntent.putExtra("website", word); 
           startActivity(mIntent); 
          } 
         }; 

         ss.setSpan(clickableSpan, lastIndex, lastIndex + word.length(), 
           Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

         lastIndex += word.length(); 
        } 
       } 


      } 
     } 

     return ss; 
    } 

其大多數的情況下工作。但是,並不適用於所有情況下的例子。

在你的計劃的條款和條件 這些號碼範圍將不再適用,將 通過這種收費結構代替爲您提供的價格信息。有關更多信息,請參閱www.ee.co.uk/ukcalling獲取 。

如,對於上面的情況下,當我分裂使用

String[] words = string.split(" "); 

String[] words = string.split("\\s+"); 

See www.ee.co.uk/ukcalling for作爲單個字整個字符串。相反,我需要這些3 - Seewww.ee.co.uk/ukcallingfor作爲3個不同的單詞,而不是將它們組合爲單個單詞。

我無法理解什麼是錯與空間拆分的方式。 請幫我知道。

+2

爲什麼downvoting?我提到了我所嘗試的。請讓我知道什麼是錯的,這樣,我可以改進,而不是隻是downvoting。 – NarendraJi

+0

爲了簡單起見,你也可以將它們分配給3個不同的textviews –

+0

我有動態字符串,所以我不能以靜態方式處理它們。我將只有單個文本視圖,其中需要突出顯示的url部分,無論在哪裏@VivekMishra – NarendraJi

回答

4

更換所有不可見的空白字符。

string = string.replaceAll("\\t", " "); 
string = string.replaceAll("\\xA0", " "); 
string = string.replaceAll("\\u1680", " "); 
string = string.replaceAll("\\u180e", " "); 
string = string.replaceAll("\\u2000", " "); 
string = string.replaceAll("\\u200a", " "); 
string = string.replaceAll("\\u202f", " "); 
string = string.replaceAll("\\u205f", " "); 
string = string.replaceAll("\\u3000", " "); 

對Java 8

string = string.replaceAll("(^\\h*)|(\\h*$)",""); 

檢查這個how-to-trim-no-break-space-in-java

+0

這工作。非常感謝 :) – NarendraJi

4

試試這個。它適用於所有情況對我來說

SpannableString ss = new SpannableString("Your String"); 
    ClickableSpan clickableSpan = new ClickableSpan() { 
    @Override 
    public void onClick(View textView) { 
    //Perform Click Here 
    } 
@Override 
public void updateDrawState(TextPaint ds) { 
    super.updateDrawState(ds); 
    ds.setUnderlineText(false); 
} 
}; 

ss.setSpan(clickableSpan, pos, last+5, Spanned.SPAN_USER); 


    desc.setText(ss); 
    desc.setMovementMethod(LinkMovementMethod.getInstance()); 
    desc.setHighlightColor(Color.TRANSPARENT); 

請注意desc是我爲我設置字符串的TextView。 Thanks.Hope它有助於

相關問題