在我的开始活动中,我调用FontFactory.init(getApplicationContext());
将 Context 设置为 FontFactory 类。
我也有扩展的类,TextView
并且在这个 TextView 的构造函数中有setTypeface(FontFactory.Fonts.ROBOTO_LIGHT.getFont());
. 因此,文件中的字体在首次需要时加载,而不是在启动期间加载。
问题是只有有时,而不是每次都会出现启动错误和应用程序崩溃:
InflateException: Binary XML file line .. - 错误膨胀类 LayoutWithExtendedTextView
由字体 nativeCreateFromAsset、createFRomAsset 和 FontFactory.loadFont(FontFactory.java:46) 中的 NullPointerException 引起
第 46 行是return Typeface.createFromAsset(assetManager, fontEnum.getPath());
我的字体工厂类:
public final class FontFactory {
public enum Fonts {
ROBOTO_CONDENSED("fonts/Roboto-Condensed.ttf"), ROBOTO_LIGHT(
"fonts/Roboto-Light.ttf"), ROBOTO_MEDIUM(
"fonts/Roboto-Medium.ttf"), ROBOTO_REGULAR(
"fonts/Roboto-Regular.ttf");
private String path;
private Typeface loadedFont = null;
private Fonts(String path) {
this.path = path;
}
public String getPath() {
return path;
}
public void setLoadedFont(Typeface font) {
this.loadedFont = font;
}
public Typeface getFont() {
if (loadedFont == null) {
this.loadedFont = FontFactory.loadFont(this);
}
return loadedFont;
}
}
private static final String TAG = "FontFactory";
private static AssetManager assetManager;
public static void init(Context context) {
assetManager = context.getAssets();
}
private static Typeface loadFont(FontFactory.Fonts fontEnum) {
return Typeface.createFromAsset(assetManager, fontEnum.getPath());
}
}
加载资产时是否有一些延迟?
谢谢你。