1

私の開始アクティビティでは、FontFactory.init(getApplicationContext());Context を FontFactory クラスに設定するために呼び出します。

拡張するクラスもありTextView、この TextView のコンストラクターには がありsetTypeface(FontFactory.Fonts.ROBOTO_LIGHT.getFont());ます。そのため、ファイルからのフォントは、起動時ではなく、最初に必要になったときに読み込まれます。

問題は、起動エラーが発生してアプリケーションがクラッシュするたびにではなく、ときどきのみ発生することです。

InflateException: バイナリ XML ファイル行 .. - クラス LayoutWithExtendedTextView の膨張エラー

Typeface nativeCreateFromAsset、createFRomAsset、および FontFactory.loadFont(FontFactory.java:46) の NullPointerException が原因です。

46行目はreturn Typeface.createFromAsset(assetManager, fontEnum.getPath());

私の FontFactory クラス:

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());
    }
}

アセットの読み込みに遅延はありますか?

ありがとうございました。

4

1 に答える 1