package com.reactnativenavigation.utils; import android.content.res.AssetManager; import android.graphics.Typeface; import android.support.annotation.NonNull; import android.widget.TextView; import com.reactnativenavigation.NavigationApplication; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class TypefaceLoader { private static final Map<String, Typeface> typefaceRegistry = new HashMap<>(); private String fontFamilyName; public TypefaceLoader(String fontFamilyName) { this.fontFamilyName = fontFamilyName; } public void load(@NonNull TextView view) { Typeface result = getTypeFace(); view.setTypeface(result); } public Typeface getTypeFace() { if (typefaceRegistry.containsKey(fontFamilyName)) { return typefaceRegistry.get(fontFamilyName); } Typeface result = load(fontFamilyName); typefaceRegistry.put(fontFamilyName, result); return result; } private Typeface load(String fontFamilyName) { AssetManager assets = NavigationApplication.instance.getAssets(); try { List<String> fonts = Arrays.asList(assets.list("fonts")); if (fonts.contains(fontFamilyName + ".ttf")) { return Typeface.createFromAsset(assets, "fonts/" + fontFamilyName + ".ttf"); } if (fonts.contains(fontFamilyName + ".otf")) { return Typeface.createFromAsset(assets, "fonts/" + fontFamilyName + ".otf"); } } catch (IOException e) { e.printStackTrace(); } return Typeface.create(fontFamilyName, Typeface.NORMAL); } }