使用自定义字体时出现问题 - "native typeface cannot be made"



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

下面是我的ListVIew的getView中的代码:

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

谁能告诉我为什么我可以使用自定义房间?你可以在这里买到。文件是。ttf

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

当使用Android Studio时,assets文件夹应该在source set里面,例如

src/main/资产/

在此答案中找到

字体文件损坏或由于某些原因不支持。你可以把它放到SD卡上,并从文件中加载,以确保它不会对你的资产造成问题。

基本上有四种情况会导致这种情况:

  1. 您使用了错误的扩展名
  2. 你必须把字体放在assets文件夹中,而不是放在assets/fonts/中。你拼错了字体
  3. 字体需要小写(在我的情况下,解决方案是将MyFont.ttf重命名为MyFont.ttf, strange)

仔细检查扩展名是否大写,即:suralist_font.TTF

字体似乎经常以这种方式出现,但它可能被忽视。

我也有同样的问题,我在assets>fonts>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"));

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

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

我正在使用android studio,在我的情况下,问题是与资产文件夹的路径,在Eclipse路径的资产文件夹是res/assets/,但在android studio的src/main/assets/所以,我只是移动我的字体文件到这个路径,最后问题解决了。

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

roboto_black.ttf

,而在Java文件中声明时,我一直将其拼写为:

roboto_blak.ttf

如果你的。ttf文件在asset文件夹中,那么使用:

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

如果在fonts文件夹中,则使用:

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

希望有帮助!

希望对您有所帮助

字体。createFromAsset泄漏资产流: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);

我在Windows的comic sans ms中使用comic . ttf时遇到了同样的问题。由于我放置在assets/fonts文件夹中的原始文件是大写的,所以我必须完全用大写字母输入。Typeface.createFromAsset (getAssets(),字体/COMIC.TTF);

,原来问题是由小写引起的:

请注意,这可能是由于文件损坏或您将文件放置在错误的文件夹。

根据Android文档

主要/资产/这是空的。您可以使用它来存储原始资产文件。保存在这里的文件按原样编译成.apk文件,并保留原始文件名。您可以以与使用uri的典型文件系统相同的方式浏览该目录,并使用AssetManager作为字节流读取文件。例如,这是一个很好的位置纹理和游戏数据。

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

对我来说有效的是首先改变我的字体名称为只有小写和下划线:从 amaticc - sc.ttfamatic_sc.ttf

则在集合中。TypeFace方法更改assets/fonts/amatic_sc.ttffonts/amatic_sc.ttf

我一直在Android Studio中调试这个错误。在将字体添加到资产目录后,清洁和重建项目为我修复了这个问题。

刚刚做了一个build --> clean,它开始渲染。

我在Android 4.0.3-4.0.4上遇到了同样的问题(在模拟器IceCreamSandwich mips 4.0.3上100%重现)。

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