2016-05-13 3 views
0

Heyo, ich verwende SpannableStringBuilder, um die Farbe eines jeden Wortes zu ändern. Dies ist, wie ich es verwenden:Android - Verwenden von SpannableStringBuilder für die Farbänderung pro Zeichen

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); 

Das Problem ist, die TextView ‚s Farbe ändert sich nicht. Fehle ich hier etwas?

Update:

ich diese andere Spannable String Builder bin mit der

Alias ​​für das Hinzufügen von 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 + " "); 
    } 
} 

und ändern die Farbe eines erkannten Benutzer arbeitet

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); 

Das funktionierte auch gut, und es verwendet das gleiche ForegroundColorSpan in setSpan().

Antwort

0

Versuchen Sie, wie diese

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); 

Du specifing für beide gleich beginnen und enden, dass Sie die Angabe einer Spanne von 0 Länge, nicht eine Spanne von Länge bedeutet 1.

enter image description here

+0

Ich tat das und ich kehrte es zurück .. Die Farbe ist immer noch nicht geändert .. –

+0

Ich habe es bereits versucht und als Antwort, es war perfekt zu arbeiten. –

+0

@ Kevin Murvie: Versuchen Sie, Flagge zu ändern - >> Spannable.SPAN_EXCLUSIVE_EXCLUSIVE auf "0" (Null) –

Verwandte Themen