2016-05-29 103 views
0

我試圖改變這些字符* *之間的字符串顏色,但是我的代碼出了問題。該應用程序已完成。 每一個「諾塔」包含"*"(即This is * good *)應該改變字「好」的其餘部分的顏色和擦除"*"字符Android:試圖改變字符串的顏色

if(nota != null){ 
     if(nota.contains("* *")){ 

     nota = nota.replace("* *",""); 

     Spannable spannable = new SpannableString(nota); 
     spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), nota.indexOf("* *"), nota.indexOf("* *") + "* *".length(),  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     txtnota.setText(spannable); 

    } 
    } 

UPDATE:

我試過這個代碼,但它是部分着色的話(而不是特定的詞,我想):

if(nota != null){ 
     int firstIndex = nota.indexOf("*"); 
     if (firstIndex >= 0) { 
      nota = nota.replaceFirst("[*]{1}", ""); 
      int secIndex = nota.indexOf("*"); 
      if (secIndex >= 0) { 
       nota = nota.replaceFirst("[*]{1}", ""); 

       Spannable spannable = new SpannableString("➥ "+nota); 
       spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

       txtnota.setText(spannable); 
      } 
     } 
} 
+0

您是否在logcat中發生異常? – RominaV

+0

如果你找到兩顆星的索引,那麼當你正在尋找字符串'「* *」' –

回答

0

正如我所看到的,你首先刪除「*」字符之後,你調用的indexOf該字符,但你沒有任何更多,所以你會得到負面結果。設置跨度後移動替換指令。你不應該檢查「* *」,而是首次出現「*」,比設置範圍,然後刪除兩個「*」。或者你可以保留索引。這裏是一個代碼示例:

if(nota != null){ 
      int firstIndex = nota.indexOf("*"); 
      if (firstIndex >= 0) { 
       nota = nota.replaceFirst("[*]{1}", ""); 
       int secIndex = nota.indexOf("*"); 
       if (secIndex >= 0) { 
        nota = nota.replaceFirst("[*]{1}", ""); 

        Spannable spannable = new SpannableString(nota); 
        spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        txtnota.setText(spannable); 
       } 
      } 
    } 
+0

我試過你的代碼時,你不會在兩顆星之間找到單詞。但沒有發生。我在nota中有一個字符串,例如「This is * good *」,星星沒有擦除,好的沒有變成黃色。 –

+0

讓我解釋一下:我想擦除*星號字符,在這之後或之間會發生什麼* *應該改變顏色....不是整個短語。只是帶*字的詞:這是*好*就像迷你Markdown格式一樣。 :) –

+0

它確實改變了我,所以也許你在其他地方有一個錯誤? – Rucsi