JustMe JustMe - 1 year ago 80
Java Question

Multiple TypeFace in single TextView

I want to set the first character on

with a
and the second character with a different Type face and so on.

I read this example:

Spannable str = (Spannable) textView.getText();
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7

but it didn't help me, because I want to set multiple
TypeFace (external TTFs)

Any idea??

Answer Source

Use the following code:(I'm using Bangla and Tamil font)

  TextView txt = (TextView) findViewById(R.id.custom_fonts);  
        Typeface font = Typeface.createFromAsset(getAssets(), "Akshar.ttf");
        Typeface font2 = Typeface.createFromAsset(getAssets(), "bangla.ttf");   
        SpannableStringBuilder SS = new SpannableStringBuilder("আমারநல்வரவு");
        SS.setSpan (new CustomTypefaceSpan("", font2), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        SS.setSpan (new CustomTypefaceSpan("", font), 4, 11,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

The outcome is:

enter image description here

This uses the CustomTypefaceSpan class, taken from How can I use TypefaceSpan or StyleSpan with a custom Typeface?:

package my.app;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;

public class CustomTypefaceSpan extends TypefaceSpan {

private final Typeface newType;

public CustomTypefaceSpan(String family, Typeface type) {
    newType = type;

public void updateDrawState(TextPaint ds) {
    applyCustomTypeFace(ds, newType);

public void updateMeasureState(TextPaint paint) {
    applyCustomTypeFace(paint, newType);

private static void applyCustomTypeFace(Paint paint, Typeface tf) {
    int oldStyle;
    Typeface old = paint.getTypeface();
    if (old == null) {
        oldStyle = 0;
    } else {
        oldStyle = old.getStyle();

    int fake = oldStyle & ~tf.getStyle();
    if ((fake & Typeface.BOLD) != 0) {

    if ((fake & Typeface.ITALIC) != 0) {