无法在Android中使用字体

时间:2016-06-15 17:18:10

标签: android android-typeface

我已经阅读过有关在Android中使用字体的所有SO帖子,但我仍然无法让我的工作。我得到以下例外:

java.lang.RuntimeException: native typeface cannot be made

这是我的代码(此类和静态方法取自here):

public class SafeTypefaces {

    private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

    public static Typeface get(Context c) {

        final String assetPath = "fonts/robotobold.ttf";

        synchronized (cache) {
            if (!cache.containsKey(assetPath)) {
                try {
                    AssetManager assetManager = c.getAssets();
                    Typeface t = Typeface.createFromAsset(assetManager, assetPath); //Throws exception on this line!
                    cache.put(assetPath, t);
                } catch (Exception e) {
                    L.p("Could not get typeface '" + assetPath + "' because " + e.getMessage());
                    return null;
                }
            }
            return cache.get(assetPath);
        }
    }
}

字体位于assets/fonts文件夹中:

enter image description here

(这仍然是Eclipse。我知道,我知道)。

我尝试的事情:

  • 我尝试将字体移动到assets文件夹的根目录并更新assetPath
  • 我检查了文件夹和文件权限。
  • 我尝试使用应用程序上下文而不是我得到的活动上下文。
  • 我尝试使用不同的字体文件(一个通过电子邮件发送,另一个通过互联网下载)。

1 个答案:

答案 0 :(得分:1)

当我创建这个问题时,我遇到了解决方案。我已经花了几个小时这个,所以我觉得值得保留。

我的问题是我正在从事图书馆项目。根据这个(Android Library assets folder doesn't get copied),库项目中的资源不可用于主项目,这就是找不到字体文件的原因。 (同样,这个项目仍在使用Eclipse。可能不是使用Gradle + AS的情况。)

解决方案是将字体复制到主项目中,瞧!