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

Posted

技术标签:

【中文标题】使用自定义字体时出现问题 - “无法制作原生字体”【英文标题】:Issue when using a custom font - "native typeface cannot be made" 【发布时间】:2011-11-23 19:34:33 【问题描述】:

我正在尝试使用在互联网上找到的字体,但问题是我得到了一个带有“无法制作原生字体”的 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?你可以得到它HERE..文件是.ttf

【问题讨论】:

【参考方案1】:

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

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

src/main/assets/

发现于this answer

【讨论】:

这就是答案。只是节省了我的时间。谢谢!【参考方案2】:

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

【讨论】:

我刚刚从 File 中尝试过,现在字体可以使用了!但这意味着我的资产文件夹有问题,这会影响其他任何事情吗?有没有办法解决这个问题? 不应该影响其他东西。您可以尝试重建您的 apk,但不确定到底是什么问题。也许它无法解压缩文件?尝试使用最新的 Android SDK。 如何把它放到 sdcard 上?当一个随机的人从 Play 商店下载我的应用程序时? 附带说明:由于 gradle build 而不是 build/assets 文件夹,Android Studio 用户需要在 src/main 创建一个 assests 文件夹。 ***.com/questions/18302603/…【参考方案3】:

基本上有4个原因会导致这种情况:

    您使用了错误的扩展名 您必须将字体放在 assets 文件夹中,并且不要放在 assets/fonts/ 中 您拼错了字体 字体需要小写(在我的情况下,解决方案是将 MyFont.ttf 重命名为 myfont.ttf,奇怪)

【讨论】:

在我的例子中,我使用的是 Bootstrap,字体需要复制到 assets 文件夹的根目录。您的回答帮助解决了这个问题,所以 +1。 在我的情况下,问题是小写 我的是第二名。好点,可能会帮助很多人【参考方案4】:

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

字体似乎经常以这种方式出现,可能会被忽略。

【讨论】:

刚刚帮我解决了这个问题! :) 这也解决了我的问题,bebas 字体文件类似于 BEBAS___.TFF -- 非常感谢!【参考方案5】:

我遇到了同样的问题,我在 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"));

【讨论】:

【参考方案6】:

相当老的线程,但我想再添加一个可能发生这种情况的原因:您必须在调用字体之前设置内容视图。请参阅下面的示例

不起作用

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

【讨论】:

fonts/whatever.ttf 部分救了我。谢谢!【参考方案7】:

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

【讨论】:

【参考方案8】:

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

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

希望对你有帮助!

【讨论】:

【参考方案9】:

希望这会有所帮助

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

【讨论】:

【参考方案10】:

正如 CommonsWare 在 this answer 中所述

我猜是字体本身有问题。那个错误 当操作系统中的本机代码尝试加载 字体。

不管怎样,试试这个:

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】:

我遇到了来自comic.TTF 的相同问题,来自comic sans ms of Windows。 由于我放置在 assets/fonts 文件夹中的原始文件如上所述是大写的,因此我必须完全以大写形式输入。 Typeface.createFromAsset(getAssets(), "fonts/COMIC.TTF");

原来问题是由小写字母引起的: Typeface.createFromAsset(getAssets(), "fonts/comic.ttf");

【讨论】:

【参考方案12】:

请注意,这是由于文件损坏或您将文件放入了错误的文件夹。

根据Android文档here

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

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

【讨论】:

【参考方案13】:

对我有用的是首先将我的字体名称改为小写和下划线:从 Amatic-Sc.ttfamatic_sc.ttf

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

【讨论】:

【参考方案14】:

我一直在调试 Android Studio 中的这个错误。将字体添加到资产目录后清理并重建项目为我解决了这个问题。

【讨论】:

【参考方案15】:

刚刚做了一个build --&gt; clean 并开始渲染。

【讨论】:

【参考方案16】:

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

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

【讨论】:

以上是关于使用自定义字体时出现问题 - “无法制作原生字体”的主要内容,如果未能解决你的问题,请参考以下文章

尝试实现自定义字体时出现“@font-face 声明不遵循 fontspring 防弹语法”错误

使用 Angular 材质定义自定义主题时出现 SassError

使用自定义 Autowired 时出现 NullPointerException

使用自定义操作栏布局时出现 Robolectric InflateException

使用自定义维度重新排序集合视图单元格时出现问题

使用 Hbase 自定义过滤器时出现异常