Вот как я это делаю:
Класс FontCache:
import android.content.Context;
import android.graphics.Typeface;
import java.util.HashMap;
public class FontCache {
private static HashMap<String, Typeface> fontCache = new HashMap<>();
public static Typeface getTypeface(String fontname, Context context) {
Typeface typeface = fontCache.get(fontname);
if (typeface == null) {
try {
typeface = Typeface.createFromAsset(context.getAssets(), fontname);
} catch (Exception e) {
return null;
}
fontCache.put(fontname, typeface);
}
return typeface;
}
}
Затем создайте пользовательский класс, расширяющий TextView:
public class MontserratRegularTextView extends android.support.v7.widget.AppCompatTextView {
public MontserratRegularTextView(Context context) {
super(context);
applyCustomFont(context);
}
public MontserratRegularTextView(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context);
}
public MontserratRegularTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
applyCustomFont(context);
}
private void applyCustomFont(Context context) {
Typeface customFont = FontCache.getTypeface("fonts/Montserrat-Regular.otf", context);//your font path here
setTypeface(customFont);
}
}
Затем добавьте его в свой пользовательский XML-файл, который вы делаете следующим образом:
<com.example.myapplication.customFonts.MontserratRegularTextView
android:id="@+id/user_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/nav_header_title"
/>
Надеюсь, это поможет вам!