2015-04-15 1 views
0

Мне нужно изменить цвет каждой гласной буквы в TextView. Например у меня есть ("а", "е", "я", "о", "у"), и мне нужно, чтобы они были чем-то вроде этого -Как изменить некоторые символы в TextView?

GR<font color='green'>EE</font>N C<font color='green'>O</font>L<font color='green'>O</font>R

I пытался это сделать:

if(text.contains("o")){ 
     SpannableString spanText = new SpannableString(text); 

     // make "text" (characters pos-1 to pos) red 
     spanText.setSpan(new ForegroundColorSpan(Color.GREEN), text.indexOf("o") - 1, text.indexOf("o"), 0); 
     labelTextView.setText(spanText, TextView.BufferType.SPANNABLE); 
    } 

Но мне нужно более сложное изменение SpannableString, но не знаю как. Любые предложения?

ответ

1

Вы можете обернуть ваши индивидуальные цвета в цветовых тегах 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.

+0

Этот метод является хорошим и простым, но мне нужно изменить все буквы гласных в String, которые я получаю. – AndrewS

+1

См. Edit для быстрого примера. – Submersed