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)
1
A
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.