package droidkit.text; import android.content.res.AssetManager; import android.graphics.Paint; import android.graphics.Typeface; import android.support.annotation.NonNull; import android.widget.TextView; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import droidkit.log.Logger; /** * @author Daniel Serdyukov */ public final class Fonts { private static final String FONTS_DIR = "fonts"; private static final String FONTS_PATH = FONTS_DIR + "/"; private static final Map<String, Typeface> CACHE = new HashMap<>(); private Fonts() { } @NonNull public static List<String> list(@NonNull AssetManager am) { try { return Arrays.asList(am.list(FONTS_DIR)); } catch (IOException e) { Logger.error(e); } return Collections.emptyList(); } @NonNull public static Typeface get(@NonNull AssetManager am, @NonNull String name) { Typeface tf = CACHE.get(name); if (tf == null) { tf = Typeface.createFromAsset(am, FONTS_PATH + name); CACHE.put(name, tf); } return tf; } public static void apply(@NonNull TextView textView, @NonNull Typeface typeface) { textView.setTypeface(typeface); textView.getPaint().setAntiAlias(true); textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); } public static void apply(@NonNull TextView textView, @NonNull String name) { final AssetManager am = textView.getContext().getAssets(); final List<String> fonts = list(am); if (fonts.contains(name)) { apply(textView, get(am, name)); } } }