“本地字体无法制作”只适用于某些人

我有一个应用程序,可以更改某些元素的字体。它对大多数人来说都很好,但是当试图改变字体时,可能有0.5%的人会出现异常。堆栈跟踪的重要部分如下所示:

原因:java.lang.RuntimeException:无法生成本机字体
在android.graphics.Typeface上;初始化>(Typeface.java:147)
在android.graphics.Typeface.createFromAsset(Typeface.java:121)上

正如我所说的,它适用于大多数人,所以我不认为这是字体文件或我的代码的问题。关于如何解决这个问题有什么建议吗

编辑:这是我的代码:

字体拼音font=Typeface.createFromAsset(getAssets(),
“字体/CharisSILR.ttf”);
文本视图电视;
tv=((TextView)findViewById(R.id.SearchPronanctionTitle));
设置字体(拼音字体);

Android操作系统的此缺陷可能是您出现问题的原因:

Typeface.createFromAsset泄漏资产流

此bugreport中还有哪些解决方法:

我修改了HTH的变通方法,使该方法不采用字体
路径或格式。字体资源的完整路径必须作为
参数。我还将对createFromAsset()的调用包装在
尝试catch block,以便get()方法在资产
找不到

公共类字体{
私有静态最终字符串TAG=“Typefaces”;
私有静态最终哈希表<字符串,字体>缓存=新哈希表<字符串,字体>();
公共静态字体get(上下文c,字符串assetPath){
已同步(缓存){
如果(!cache.containsKey(assetPath)){
试一试{
Typeface t=Typeface.createFromAsset(c.getAssets(),
资产路径);
cache.put(assetPath,t);
}捕获(例外e){
Log.e(标记“无法获取字体””+assetPath
+“'因为”+e.getMessage());
返回null;
}
}
返回cache.get(assetPath);
}
}
}

发表评论