Search code examples
androidtextview

Android: Coloring part of a string using TextView.setText()?


I am looking to change the text of a TextView view via the .setText("") method while also coloring a part of the text (or making it bold, italic, transparent, etc.)and not the rest. For example:

title.setText("Your big island <b>ADVENTURE!</b>";

I know the above code is incorrect but it helps illustrate what I would like to achieve. How would I do this?


Solution

  • Use spans.

    Example:

    final SpannableStringBuilder sb = new SpannableStringBuilder("your text here");
    
    // Span to set text color to some RGB value
    final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); 
    
    // Span to make text bold
    final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); 
    
    // Set the text color for first 4 characters
    sb.setSpan(fcs, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    
    // make them also bold
    sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    
    yourTextView.setText(sb);