2016-05-13 4 views
0

Heyo, я использую SpannableStringBuilder, чтобы изменить цвет каждого символа. Это, как я использую его:Android - Использование SpannableStringBuilder для изменения цвета персонажа

SpannableStringBuilder specialSpan = new SpannableStringBuilder(); 

specialSpan.append(context.getResources().getString(R.string.asdf)); 

specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.blue)), 0, 0, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.purple)), 1, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.orange)), 2, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.green)), 3, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

userSpecialText.setText(specialSpan); 

Проблема есть, TextView «s цвет не меняется. Я что-то упустил?

Update:

Я использую эту другую Spannable строку строитель, который работает для добавления Emojis

for (String part : 
partofContent){ 
if (part.contains(":")){ 
    int firstEq = sb.length(); 
    Typeface font = FontCache.getTypeface("emojione-android.ttf", context); 
    String convertPart = Emojione.shortnameToUnicode(part, true); 
    sb.append(convertPart + " "); 
    int lastEq = sb.length(); 
    sb.setSpan(new CustomTypefaceSpan("", font), firstEq, lastEq, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } else { 
    sb.append(part + " "); 
    } 
} 

И изменить цвет обнаруженного пользователя Алиас

int aliasStart = sb.length(); 
sb.append("@" + alias + " "); 
int aliasEnd = sb.length(); 

sb.setSpan(new MyClickableSpan("@" + alias + " "), aliasStart, aliasEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
sb.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.miBlue)), aliasStart, aliasEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), aliasStart, aliasEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

Это работало тоже, и он использует то же самое ForegroundColorSpan в setSpan().

ответ

0

Попробуйте, как этот

SpannableStringBuilder specialSpan = new SpannableStringBuilder(); 

specialSpan.append(context.getResources().getString(R.string.asdf)); 

specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.blue)), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.purple)), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.orange)), 2, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
specialSpan.setSpan(new ForegroundColorSpan(context.getResources().getColor(R.color.green)), 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

userSpecialText.setText(specialSpan); 

Вы же для задав как начало и конец, что означает, что вы указываете промежуток длины 0, а не пядь длины 1.

enter image description here

+0

Я сделал это, и я вернул его. Цвет по-прежнему не изменился. –

+0

Я уже пробовал, и, чтобы ответить на него, это была прекрасная работа. –

+0

@ Kevin Murvie: Попробуйте изменить флаг - >> Spannable.SPAN_EXCLUSIVE_EXCLUSIVE до "0" (Zero) –