我改变了一些元素的字体字体的应用程序。 它适用于大多数人,但也许试图改变字体时0.5%的得到一个异常。 堆栈跟踪的显著的部分是这样的:
Caused by: java.lang.RuntimeException: native typeface cannot be made
at android.graphics.Typeface.<init>(Typeface.java:147)
at android.graphics.Typeface.createFromAsset(Typeface.java:121)
正如我说的,它适用于大多数人,所以我不认为这是与字体文件或我的代码有问题。 关于如何解决这个有什么建议?
编辑:这是我的代码:
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
"fonts/CharisSILR.ttf");
TextView tv;
tv = ((TextView) findViewById(R.id.searchPronunciationTitle));
tv.setTypeface(phoneticFont);
Answer 1:
Android操作系统的这个错误可能是你的问题的原因:
Typeface.createFromAsset泄漏资产流
凡也是这个错误报告解决方法:
我改变HTH的解决方法,这样的方法不承担字体路径或格式。 字体资产的完整路径必须提交作为参数。 我还包裹在一个try-catch块调用createFromAsset(),这样,如果没有找到该资产的get()方法将返回null。
public class Typefaces {
private static final String TAG = "Typefaces";
private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();
public static Typeface get(Context c, String assetPath) {
synchronized (cache) {
if (!cache.containsKey(assetPath)) {
try {
Typeface t = Typeface.createFromAsset(c.getAssets(),
assetPath);
cache.put(assetPath, t);
} catch (Exception e) {
Log.e(TAG, "Could not get typeface '" + assetPath
+ "' because " + e.getMessage());
return null;
}
}
return cache.get(assetPath);
}
}
}
Answer 2:
我跟着一些在这里找到了解决方案,但没有成功。 我认为这是一些真正的默默无闻,程序员经常做。 然后地方我读它可能与字体路径,疑难杂症:
代替:
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
"blanch_caps.ttf");
我更改为:
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
"fonts/blanch_caps.ttf");
而我的文件是在资产/字体/ blanch_caps.ttf。 没有它就像一个魅力!
Answer 3:
此错误想出了当字体是在图书馆资源文件夹。 当我它复制到这是使用这个库的应用程序的资产,该错误消失。
似乎资产无法导入: Android的库文件夹的资产不被复制
这里有一些其他情况: 发行使用自定义字体时- “本地字体不能言”
Answer 4:
我用这个有很多挣扎。 我想尽一切可能性,并没有什么帮助。 最后,要的问题是其他地方。 如果您正在构建与摇篮您的项目,不要忘记在的build.gradle文件中添加这些行。 这在我的情况下解决了这个问题。
sourceSets {
main {
assets.srcDirs = ['assets']
}
}
Answer 5:
您必须创建SRC内部资产的文件夹-在AndroidStudio> 主 。 这样的工作!
Answer 6:
对我来说,它是基于字体的文件名。 出于某种原因,它被命名为FontName..ttf
我不知道为什么双点在那里 - 我抬头一看原来的字体和他们在我的Windows \字体作为FontName..ttf文件夹中。 显然窗户也没在意,而Android吓坏了。 我重命名的文件,而现在一切都高兴。
Answer 7:
对于我来说,我已经发现Assets文件夹位于/main/java/assets
,但他们必须在/main/assets
Answer 8:
较低的情况下,这样做:
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
"fonts/charissilr.ttf");
请记住,也重命名文件。
Answer 9:
更改此一个
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
"fonts/CharisSILR.ttf");
至
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
"CharisSILR.ttf");
Answer 10:
我只是碰到了这个问题,当我用的是MagicTextView通过qwerjk。 我试图把MTV类在库中,并在我的主要项目中使用它。 下面是我如何开始工作:
- 在主要项目资产文件夹,创建子文件夹名为字体
- 在TTF文件复制到资产/ fonts文件夹。 我的文件名是驼峰(如ReservoirGrunge.ttf)等瓶盖或没有端点似乎并不重要。
在我的主要项目中,我从膨胀的XML MTV视图。 确保MagicTextView指向正确的库路径。 例如,我的MTV类库是com.library.library_magictextview.MagicTextView所以我的主视图的XML不得不读:
<com.library.library_magictextview.MagicTextView android:textSize= "50dp" android:textColor= "#ffffffff" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:textStyle= "bold" android:padding= "20dp" android:gravity= "center" r:strokeColor= "#FFff0000" r:strokeJoinStyle= "miter" r:strokeWidth= "5" r:typeface= "ReservoirGrunge" android:text= "BobDillon" />
Answer 11:
在我们的情况,我们已聘请命中与缓存解决方案。 我们介绍的是,我们在测试的同一个try块内OTF文件和TTF文件的问题,这显然是打算如果你正在寻找获得TTF失败对OTF的第一次尝试),但我认为它值得张贴只是柜面它滑倒通过别人的通知,而他们可能试图相同的解决方案。
protected static Typeface getTypeface(Context p_context, String p_fontName){
Typeface tf = null;
try {
tf = Typeface.createFromAsset(p_context.getAssets(), "fonts/" + p_fontName + ".otf");
}catch(Exception e) {}
if( tf != null ) return tf;
try {
tf = Typeface.createFromAsset(p_context.getAssets(), "fonts/" + p_fontName + ".ttf");
}catch(Exception e) {}
return tf;
}
Answer 12:
在我来说,我刚刚删除的资产文件夹(我手动创建)和刚刚创建使用向导一个新的。 显然,这不是理解为财产文件夹,但读作只是一个普通文件夹等getAssets()没有工作,给我的错误。
Answer 13:
在Android Studio中:你有什么对我来说是把TTF文件直接到资产的文件夹,而不字体的子文件工作,它没有与子文件夹中工作((getAssets(),“字体/ oldengl.ttf”)没有工作时,我在的src / main /资产/字体的TTF)。 此工作原理:SRC /主/资产/ oldengl.ttf字样CustomFont的= Typeface.createFromAsset(getAssets(), “oldengl.ttf”);
Answer 14:
我在这个问题跑,当我输入这是为了支持这两种风格的Eclipse项目和Android工作室的风格项目的模块。
我得到了我的问题,由AS-设置源移除资产解决
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName '1.0'
sourceSets {
main {
java.srcDirs = ['src']
res.srcDirs = ['res']
//assets.srcDirs = ['assets']//commented this out because modlue was not having this directory
manifest.srcFile 'AndroidManifest.xml'
}
}
}
或到Android工作室风格转换的项目也可以解决我想这个问题。
Answer 15:
在我的情况下,
我只是用以前的代码。所以我忘了在资产文件夹中的字体文件..
但我不能老是想出2小时..
可能的情况下,这个错误,
- 字体文件丢失
- 错误的字体名称或错误的字体扩展
为前: 字体/的roboto.ttf而不是字体/ roboto.otf
文章来源: “Native typeface cannot be made” only for some people