Issue when using a custom font - "native typeface cannot be made"

JavaAndroidListviewFontsTextview

Java Problem Overview


I'm trying to use a font I found on the internet, but the problem is that I get an FC with "native typeface cannot be made".

Here is the code in the getView of my ListVIew:

        holder.tv_SuraName   =(TextView)convertView.findViewById(R.id.Start_Name);
    	holder.tv_SuraName.setTypeface(Typeface.createFromAsset(mContext.getAssets(), "suralist_font.ttf"));

Can anyone tell me why can I use the custom rom? You can get it HERE .. the file is .ttf

Java Solutions


Solution 1 - Java

My problem was incorrect placement of the assets folder.

When using Android Studio the assets folder should be inside of the source sets e.g.

> src/main/assets/

Found in this answer

Solution 2 - Java

The font file is either corrupt or unsupported for some reason. You can drop it on the SD card and load it from file, to make sure it's not a problem with your assets.

Solution 3 - Java

There are basically 4 things that can cause this:

  1. You use the wrong extension
  2. You have to place the fonts in the assets folder and not inside assets/fonts/
  3. You misspelled the fonts
  4. The fonts need to be lowercase (in my case the solution was to rename MyFont.ttf to myfont.ttf, strange)

Solution 4 - Java

Double check the extension isn't in caps, ie. suralist_font.TTF

Fonts often come seem to come that way and it might be overlooked.

Solution 5 - Java

I had this same problem, I created mine in assets>fonts>whatever.ttf and was getting the same error. I added the fonts extension (fonts/whatever.ttf) and it fixed the problem in every case.

 holder.tv_SuraName   =(TextView)convertView.findViewById(R.id.Start_Name);
 holder.tv_SuraName.setTypeface(Typeface.createFromAsset(mContext.getAssets(),    "fonts/suralist_font.ttf"));

Solution 6 - Java

Rather old thread, but I want to add one more reason this can happen: You have to set the content view before calling typeface. See example below

Does not work:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView title = (TextView)findViewById(R.id.tvTitle);
        Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/whatever.ttf");
        title.setTypeface(font);

        setContentView(R.layout.main);
    }

Does work!

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		setContentView(R.layout.main); // <-- call before typeface

        TextView title = (TextView)findViewById(R.id.tvTitle);
        Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/whatever.ttf");
        title.setTypeface(font);
    }

Solution 7 - Java

I am using android studio, in my case problem was with the path of assets folder, in Eclipse path for assets folder is res/assets/ but in Android Studio its src/main/assets/ So, i just move my font file to this path and finally problem solved.

Solution 8 - Java

Either your font file is corrupt else you making some mistake in spelling while calling your file name. I had same issue, it was because file name specified in asset folder was

> roboto_black.ttf

and while declaring in java file, i have been spelling it as:

> roboto_blak.ttf

If your .ttf files are in asset folder,then use:

Typeface type_bold = Typeface.createFromAsset(getAssets(), "roboto_black.ttf");

Else if it is in fonts folder, then use:

type_bold = Typeface.createFromAsset(getAssets(), "fonts/roboto_black.ttf");

Hope it helps!

Solution 9 - Java

As CommonsWare states in this answer

> I would guess that there is a problem with the font itself. That error > will be triggered when native code in the OS attempts to load the > typeface.

Anyway try this one:

holder.tv_SuraName = (TextView)convertView.findViewById(R.id.Start_Name);
Typeface Font = Typeface.createFromAsset(this.getAssets(),"suralist_font.ttf");
holder.tv_SuraName.setTypeface(Font);

Solution 10 - Java

Hope this will help

Typeface.createFromAsset leaks asset stream: http://code.google.com/p/android/issues/detail?id=9904

Solution 11 - Java

I had the same problem with COMIC.TTF from comic sans ms of Windows. Since the original file I placed in assets/fonts folder was in uppercase as spelt above, I had to type it exactly in uppercase. Typeface.createFromAsset(getAssets(), "fonts/COMIC.TTF");

it turns out the problem was caused by the lower case: Typeface.createFromAsset(getAssets(), "fonts/comic.ttf");

Solution 12 - Java

Please note that this is due to either a corrupt file or you have placed the file in the wrong folder.

According to Android documentation here

> main/assets/ This is empty. You can use it to store raw asset files. Files that you save here are compiled into an .apk file as-is, and the original filename is preserved. You can navigate this directory in the same way as a typical file system using URIs and read files as a stream of bytes using the AssetManager. For example, this is a good location for textures and game data.

Therefore your folder structure should be yourmodule/main/assets (e.g. app/main/assets )

Solution 13 - Java

What worked for me was first changing my font name to only lower case and underscore: from Amatic-Sc.ttf to amatic_sc.ttf.

Then in the set.TypeFace method change assets/fonts/amatic_sc.ttf to just fonts/amatic_sc.ttf.

Solution 14 - Java

I've been debugging forever on this error in Android Studio. Clean and rebuilding the project after adding the fonts to the assets directory fixed the issue for me.

Solution 15 - Java

Just did a build --> clean and it started rendering .

Solution 16 - Java

I had same issue which happened on Android 4.0.3-4.0.4 (100% reproducible on emulator IceCreamSandwich mips 4.0.3).

The problem was that TTF fonts, that I had, were not correct, despite almost all Android versions were able to load those TTF font. So I used https://cloudconvert.com/woff-to-ttf (since I had woff files as well) to make new TTF fonts, which solved my problem.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOmarView Question on Stackoverflow
Solution 1 - JavaroelvogelView Answer on Stackoverflow
Solution 2 - JavaNikolay ElenkovView Answer on Stackoverflow
Solution 3 - JavaerdomesterView Answer on Stackoverflow
Solution 4 - JavatlrmcknzView Answer on Stackoverflow
Solution 5 - Javaa54studioView Answer on Stackoverflow
Solution 6 - JavaAlina B.View Answer on Stackoverflow
Solution 7 - JavaRahul SharmaView Answer on Stackoverflow
Solution 8 - JavaAbhilasha SharmaView Answer on Stackoverflow
Solution 9 - JavaMr.JamesView Answer on Stackoverflow
Solution 10 - JavaPawan MaheshwariView Answer on Stackoverflow
Solution 11 - JavaOlumide OyetokeView Answer on Stackoverflow
Solution 12 - Javad4c0d312View Answer on Stackoverflow
Solution 13 - JavaDavid JavaNabView Answer on Stackoverflow
Solution 14 - JavaRuudJView Answer on Stackoverflow
Solution 15 - JavaAnukoolView Answer on Stackoverflow
Solution 16 - JavanegersiuView Answer on Stackoverflow