package net.avenwu.support.util; import android.content.Context; import android.content.res.AssetManager; import android.graphics.Paint; import android.graphics.Typeface; import android.util.Log; import android.widget.TextView; import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; /** * Created by chaobin on 10/8/15. */ public class TypefaceUtils { private static final Map<String, WeakReference<Typeface>> sCachedFonts = new HashMap<>(); /** * A helper loading a custom font. * * @param assetManager App's asset manager. * @param filePath The path of the file. * @return Return {@link android.graphics.Typeface} or null if the path is invalid. */ public static Typeface load(final AssetManager assetManager, final String filePath) { synchronized (sCachedFonts) { try { if (!sCachedFonts.containsKey(filePath) || sCachedFonts.get(filePath).get() == null) { final Typeface typeface = Typeface.createFromAsset(assetManager, filePath); sCachedFonts.put(filePath, new WeakReference<Typeface>(typeface)); return typeface; } } catch (Exception e) { Log.w("Calligraphy", "Can't create asset from " + filePath + ". Make sure you have passed in the correct path and file name.", e); sCachedFonts.put(filePath, null); return null; } return sCachedFonts.get(filePath).get(); } } public static void setTypeface(Context context, TextView textView, String filePath) { if (textView == null || context == null) return; textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); textView.setTypeface(load(context.getAssets(), filePath)); } }