public class TypefaceUtil {
private static final HashMap<String, Typeface> sCachedFonts = new HashMap<String, Typeface>();
private static final String PREFIX_ASSET = "asset:";
private TypefaceUtil() {
}
/**
* @param familyName if start with 'asset:' prefix, then load font from asset folder.
* @return
*/
public static Typeface load(Context context, String familyName, int style) {
if(familyName != null && familyName.startsWith(PREFIX_ASSET))
synchronized (sCachedFonts) {
try {
if (!sCachedFonts.containsKey(familyName)) {
final Typeface typeface = Typeface.createFromAsset(context.getAssets(), familyName.substring(PREFIX_ASSET.length()));
sCachedFonts.put(familyName, typeface);
return typeface;
}
} catch (Exception e) {
return Typeface.DEFAULT;
}
return sCachedFonts.get(familyName);
}
return Typeface.create(familyName, style);
}
}
调用方法:
public static void applyFont(TextView v, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
TypedArray a = v.getContext().obtainStyledAttributes(attrs, new int[]{R.attr.tv_fontFamily}, defStyleAttr, defStyleRes);
String fontFamily = a.getString(0);
if (fontFamily != null) {
Typeface typeface = TypefaceUtil.load(v.getContext(), fontFamily, 0);
v.setTypeface(typeface);
}
a.recycle();
}