使用自定义字体时出现问题 – “无法制作原生字体”

我正在尝试使用我在互联网上find的字体,但问题是我得到一个“原生字体无法制作”的FC。

这是我的ListVIew的getView中的代码:

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

谁能告诉我为什么我可以使用自定义ROM? 你可以在这里得到它..文件是.ttf

由于某种原因,字体文件已损坏或不受支持。 您可以将其放在SD卡上并从文件中加载,以确保它不是您资产的问题。

我的问题是资产文件夹的放置不正确。

在使用Android Studio时,资源文件夹应位于源集内,例如

的src / main /资产/

在这个答案中find

基本上有四件事情可以导致这一点:

  1. 你使用错误的扩展名
  2. 您将字体放置在资产文件夹中,而不是位于assets / fonts /
  3. 你拼错了字体
  4. 字体需要小写(在我的情况下,解决scheme是将MyFont.ttf重命名为myfont.ttf,奇怪)

仔细检查扩展是不是在帽,即。 suralist_font.TTF

字体通常似乎是这样来的,可能会被忽略。

我有这个相同的问题,我创build了我的资产>字体> whatever.ttf并得到相同的错误。 我添加了字体扩展名(fonts / whatever.ttf),并且在任何情况下都解决了这个问题。

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

我正在使用android studio,在我的情况下,问题是资产文件夹的path,在资源文件夹的Eclipsepath是res / assets /但在Android Studio中它的src / main / assets /所以,我只是将我的字体文件移动到这path,并最终解决问题。

相反,旧的线程,但我想添加一个更多的原因,这可能发生:你必须设置内容视图之前调用字体。 看下面的例子

不起作用:

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

工作!

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

希望这会有所帮助

Typeface.createFromAsset泄漏资产stream: http : //code.google.com/p/android/issues/detail? id= 9904

正如CommonsWare在这个答案中所述

我猜想这个字体本身有问题。 当操作系统中的本地代码尝试加载字体时,将会触发该错误。

无论如何尝试这一个:

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

我有COMIC.TTF相同的问题从Windows的漫画sms。 由于我放在资产/字体文件夹中的原始文件是上面拼写的大写,所以我不得不用大写字母input它。 Typeface.createFromAsset(getAssets(),“fonts / COMIC.TTF”);

原来这个问题是由小写引起的:Typeface.createFromAsset(getAssets(),“fonts / comic.ttf”);

请注意,这是由于损坏的文件,或者您已将文件放在错误的文件夹中。

根据Android文档在这里

主/资产/这是空的。 您可以使用它来存储原始资产文件。 您在这里保存的文件按原样编译为.apk文件,并保留原始文件名。 您可以像使用URI的典型文件系统一样导航此目录,并使用AssetManager将文件作为字节stream读取。 例如,这是一个很好的纹理和游戏数据的位置。

因此,你的文件夹结构应该是yourmodule / main / assets (例如*** pp / main / assets ***)

对我而言,首先将我的字体名称更改为小写和下划线:从Amatic-Sc.ttfamatic_sc.ttf

然后在set.TypeFace方法中将assets / fonts / amatic_sc.ttf更改fonts / amatic_sc.ttf

我在Android Studio中一直在对这个错误进行debugging。 在将字体添加到资产目录后,清理并重build项目会为我解决问题。

只是做了一个build --> clean ,并开始渲染。

我有同样的问题发生在Android 4.0.3-4.0.4(100%模拟器IceCreamSandwich mips 4.0.3重现)。

问题是TTF字体,我有,是不正确的,尽pipe几乎所有的Android版本都能够加载这些TTF字体。 所以我用https://cloudconvert.com/woff-to-ttf (因为我也有woff文件)来制作新的TTF字体,这就解决了我的问题。

要么你的字体文件损坏,否则你在拼写时出现一些错误,同时调用你的文件名。 我有同样的问题,这是因为资产文件夹中指定的文件名是

roboto_black.ttf

并在java文件中声明时,我已经拼写为:

roboto_blak.ttf

如果.ttf文件位于资产文件夹中,请使用:

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

否则,如果是在字体文件夹,然后使用:

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

希望能帮助到你!