Multiple TypeFace in single TextView

前端 未结 2 1619
深忆病人
深忆病人 2020-11-29 18:31

I want to set the first character on TextView with a TypeFace and the second character with a different Type face and so on.
I read this exampl

2条回答
  •  悲哀的现实
    2020-11-29 19:15

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

      TextView txt = (TextView) findViewById(R.id.custom_fonts);  
            txt.setTextSize(30);
            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);
            txt.setText(SS);
    

    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) {
        super(family);
        newType = type;
    }
    
    @Override
    public void updateDrawState(TextPaint ds) {
        applyCustomTypeFace(ds, newType);
    }
    
    @Override
    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) {
            paint.setFakeBoldText(true);
        }
    
        if ((fake & Typeface.ITALIC) != 0) {
            paint.setTextSkewX(-0.25f);
        }
    
        paint.setTypeface(tf);
    }
    }
    

提交回复
热议问题