2014-08-29 74 views
1

我知道我可以用Spannable更改TextView部分的顏色,我用它來改變文本中每個字符'e'的顏色。但我得到這個錯誤:如何更改TextView中的某些字符顏色

java.lang.IndexOutOfBoundsException: setSpan (55 ... 56) ends beyond length 0

我的代碼:

aye="My Text has been written today"; 
SpannableString spantext=new SpannableString(aye); 
for (int i=0;i<aye.length();i++) { 
    if (aye.contains("e")) { 
     a+=aye.indexOf("e", a)+1; 
     spantext.setSpan(new ForegroundColorSpan(Color.RED), a, a+1, 0); 
     holder.tv_arabic.setText(spantext); 
    } 
} 

什麼辦法?

+0

你已經參考了嗎? http://stackoverflow.com/a/16335416/3247356鏈接評論已解決「IndexOutOfBoundsException」。 – 2014-08-29 03:08:30

回答

2

試試這個:

String aye = "My Text has been written today"; 
     String ayeTemp = "My Text has been written today"; 

     ArrayList<Integer> positionInt = new ArrayList<>(); 
     for (int i = 0; i < ayeTemp.length(); i++) { 
      if (ayeTemp.contains("e")) { 
       if (positionInt.size() == 0) { 
        positionInt.add(ayeTemp.indexOf("e")); 
       } else { 
        positionInt.add(positionInt.get(positionInt.size() - 1) + ayeTemp.indexOf("e") + 1); 
       } 
       ayeTemp = ayeTemp.substring(ayeTemp.indexOf("e") + 1, ayeTemp.length() - 1); 
      } else { 
       break; 
      } 
     } 
     Spannable wordtoSpan = new SpannableString(aye); 
     for (int i = 0; i < positionInt.size(); i++) { 
      wordtoSpan.setSpan(new ForegroundColorSpan(Color.RED), positionInt.get(i), positionInt.get(i) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     holder.tv_arabic.setText(wordtoSpan); 

:從https://stackoverflow.com/a/6094346/3922891

0

我也面臨同樣的problem.Following是我code.You可以跟隨你的代碼這個例子

aye="My Text has been written today"; 
String newText = aye.replace("e", "<font color=#FF0000>e</font>"); 
holder.tv_arabic.setText(Html.fromHtml(newText)); 

的原始靈感like this

相關問題