2016-06-02 9 views
1

Ich habe Zeichenfolge namens Note. Ich verwende diesen Code, um die Farbe bestimmter Wörter zwischen zwei * * Zeichen zu ändern. Es funktioniert teilweise gut. Das Problem, mit dem ich konfrontiert bin, ist nicht das Ausmalen der genauen Wörter zwischen * * nach dem Einfügen dieses Symbols "➥" (ein Beispiel für einen Ausdruck: Dies ist ein *good* Buch - es ändert sich gelb zu dem letzten Buchstaben vor dem Wort beginnt mit * - a good anstelle von good). Ich brauche Hilfe. Ich bin Neuling.Android: Versuchen, Farbe von String mit Hilfe spannbar (teilweise arbeiten)

Antwort

1

Ursache ist Länge der Zeichenfolge wurde auf 2 Symbole geändert, so Indizes werden auch geändert.

Wie für mich ist es nicht gut Weg, aber als schnelle Lösung:

int removedSymbolCount = 0; 
    if (firstIndex >= 0) { 
     note = note.replaceFirst("[*]{1}", ""); 
     removedSymbolCount++; 
     int secIndex = note.indexOf("*"); 
     if (secIndex >= 0) { 
      note = note.replaceFirst("[*]{1}", ""); 
      removedSymbolCount++; 
      String newString = "➥ "+note; 
      Spannable spannable = new SpannableString(newString); 
      spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex + removedSymbolCount, secIndex + removedSymbolCount, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC), firstIndex + removedSymbolCount, secIndex + removedSymbolCount, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

      txtnote.setText(spannable); 
     } 
    } 

ich für eine bessere Lösung denken möglich istMatcher und Regex Ausdrücke zu verwenden.