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

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

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

回答1:

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.



回答2:

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



回答3:

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)


回答4:

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.



回答5:

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")); 


回答6:

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); // 


回答7:

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.



回答8:

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!



回答9:

Hope this will help

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



回答10:

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); 


回答11:

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");



回答12:

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. a***pp/main/assets*** )



回答13:

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.



回答14:

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.



回答15:

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



回答16:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!