FontUtils.java
public class FontUtils {
private static Map<String, Typeface> TYPEFACE = new HashMap<String, Typeface>();
public static SpannableString actionBar(Activity mActivity, String title) {
SpannableString s = new SpannableString(title);
s.setSpan(new TypefaceSpan(mActivity, "simple.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return s;
}
public static void overrideFonts(final Activity mActivity) {
mActivity.getLayoutInflater().setFactory(new LayoutInflater.Factory() {
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View v = FontUtils.tryInflate(name, context, attrs);
if (v instanceof TextView) {
FontUtils.setTypeFace((TextView) v, mActivity);
}
return v;
}
});
}
public static Typeface getFonts(Context context, String name) {
Typeface typeface = TYPEFACE.get(name);
if (typeface == null) {
typeface = Typeface.createFromAsset(context.getAssets(), "fonts/"+ name);
TYPEFACE.put(name, typeface);
}
return typeface;
}
public static View tryInflate(String name, Context context, AttributeSet attrs) {
LayoutInflater li = LayoutInflater.from(context);
View v = null;
try {
v = li.createView(name, null, attrs);
} catch (Exception e) {
try {
v = li.createView("android.widget." + name, null, attrs);
} catch (Exception e1) {
}
}
return v;
}
public static void setTypeFace(TextView tv, Context mContext) {
tv.setTypeface(FontUtils.getFonts(mContext, "simple.ttf"));
}
}
TypefaceSpan.java
public class TypefaceSpan extends MetricAffectingSpan {
private static LruCache<String, Typeface> sTypefaceCache =
new LruCache<String, Typeface>(12);
private Typeface mTypeface;
public TypefaceSpan(Context context, String typefaceName) {
mTypeface = sTypefaceCache.get(typefaceName);
if (mTypeface == null) {
mTypeface = Typeface.createFromAsset(context.getApplicationContext()
.getAssets(), String.format("fonts/%s", typefaceName));
sTypefaceCache.put(typefaceName, mTypeface);
}
}
@Override
public void updateMeasureState(TextPaint p) {
p.setTypeface(mTypeface);
p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
@Override
public void updateDrawState(TextPaint tp) {
tp.setTypeface(mTypeface);
tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
}
inside activity
@Override
protected void onCreate(Bundle savedInstanceState) {
FontUtils.overrideFonts(YourActivity.this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//toolbar
getSupportActionBar().setTitle(FontUtils.actionBar(this, getResources().getString(R.string.app_name)));
}