2016-05-29 104 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