Вы можете обернуть ваши индивидуальные цвета в цветовых тегах html и использовать Html.fromHtml(String string);, чтобы получить свой Span.
Если вам нужна более сложная конкатенация строк строк, вы можете определить способ обертывания отдельных частей строки в html и конкатенации результата.
Edit:
Я уверен, что есть более эффективный способ сделать это, но это работает. Если вы хотите сопоставить несколько разных цветов, вам придется расширить логику.
public String wrapVowelsInColor(String input){
final List<String> VOWELS = new ArrayList<>(Arrays.asList(new String[] {"a", "A", "e", "E" ,"i", "I", "o", "O", "u", "U"}));
final char[] mChars = input.toCharArray();
final int count = mChars.length;
final StringBuilder builder = new StringBuilder(count);
for(int i = 0; i < count; i++){
String current = String.valueOf(mChars[i]);
if(VOWELS.contains(current)){
builder.append(wrapInColor("blue", current)));
} else {
builder.append(current);
}
}
return builder.toString();
}
public String wrapInColor(String color, String toWrap){
return String.format("<font color='%s'>%s</font>", color, toWrap);
}
Вход:
String testString = "My test string for coloring vowels";
Выход:
My t<font color='blue'>e</font>st str<font color='blue'>i</font>ng f<font color='blue'>o</font>r c<font color='blue'>o</font>l<font color='blue'>o</font>r<font color='blue'>i</font>ng v<font color='blue'>o</font>w<font color='blue'>e</font>ls
Тогда просто запустить Html.fromHtml(String string)
на выходе перед установкой продолжительности на вашем TextView
.
Этот метод является хорошим и простым, но мне нужно изменить все буквы гласных в String, которые я получаю. – AndrewS
См. Edit для быстрого примера. – Submersed