【问题标题】: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

【问题讨论】:

    标签: java android listview fonts textview


    【解决方案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 文件夹。 stackoverflow.com/questions/18302603/…
    【解决方案3】:

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

    1. 您使用了错误的扩展名
    2. 您必须将字体放在 assets 文件夹中,并且不要放在 assets/fonts/
    3. 您拼错了字体
    4. 字体需要小写(在我的情况下,解决方案是将 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字体,这解决了我的问题。

                        【讨论】:

                          猜你喜欢
                          • 2014-10-11
                          • 1970-01-01
                          • 1970-01-01
                          • 2013-03-04
                          • 1970-01-01
                          • 2013-02-26
                          • 2011-10-28
                          • 2015-05-08
                          • 1970-01-01
                          相关资源
                          最近更新 更多