Search code examples
javaandroidstringtextcolor

Is it possible to change the text color in a string to multiple colors in Java?


What I mean is, is it possible to change the text "This text is blue" to the color blue in a single string? There must be a way...

<TextView
    android:gravity="left"
    android:padding="3dip"
    android:text="This text is white. This text is blue."
    android:textColor="#ffffff"
    android:textSize="22dp"/>

Solution

  • Yes, its possible. For this you need to use SpannableString and ForegroundColorSpan.

    This should look something like this:

    SpannableStringBuilder builder = new SpannableStringBuilder();
    
    String red = "this is red";
    SpannableString redSpannable= new SpannableString(red);
    redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, red.length(), 0);
    builder.append(redSpannable);
    
    String white = "this is white";
    SpannableString whiteSpannable= new SpannableString(white);
    whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, white.length(), 0);
    builder.append(whiteSpannable);
    
    String blue = "this is blue";
    SpannableString blueSpannable = new SpannableString(blue);
    blueSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, blue.length(), 0);
    builder.append(blueSpannable);
    
    mTextView.setText(builder, BufferType.SPANNABLE);
    

    enter image description here