使用自定义字体时出现问题 – “无法制作原生字体”
我正在尝试使用我在互联网上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
基本上有四件事情可以导致这一点:
- 你使用错误的扩展名
- 您将字体放置在资产文件夹中,而不是位于assets / fonts /
- 你拼错了字体
- 字体需要小写(在我的情况下,解决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.ttf到amatic_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");
希望能帮助到你!