textview – Android Custom font Spannable Typeface Span-ThrowExceptions

Exception or error:

I am using Helvetica fonts throughout my application. Currently I am creating the fonts separately from assets. So I have say these three

HelveticaNeue = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeue.ttf");
HelveticaNeueBold = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBold.ttf");
HelveticaNeueBoldItalic = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBoldItalic.ttf");

Everything works great when I use one typeface for one TextView. However, I need to use a spannable

Spannable WordtoSpan = new SpannableString("This text should be normal, but this needs to be bold, and normal");    
WordtoSpan.setSpan(new TypefaceSpan("bold"), 5, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

And I want to have part of the string be HeleveticaNeueBold and some be just HelveticaNeue. I think what is needed is to indicate to Android that the 3 fonts above are actually related so that it can switch them nicely. Looking for any other way of doing this as well.

How to solve:

You are going to want to write a custom TypefaceSpan. The good news is that they aren’t difficult. See here for an example.


You can do the following:

SpannableString spannableString = new SpannableString("your text");
Typeface typeface = Typeface.create(ResourcesCompat.getFont(this, R.font.your_font);
    new TypefaceSpan(typeface, Typeface.NORMAL)), 
    0, 4, 

This constructor will replace the previous style of the text, achieving what you want. However, the catch is that it was introduced in API 28.

Leave a Reply

Your email address will not be published. Required fields are marked *