В настоящее время большинство шрифтов имеют такие же вариации, как у вас.Таким образом, вы можете конвертировать ваш менеджер шрифтов для обработки нескольких файлов, как показано ниже.
FontManager - FontCache.class
public class FontCache {
private static String[] fonts = {"ProximaNova-Reg.otf","ProximaNova-Light.otf","ProximaNova-Medium.otf","ProximaNova-Sbold.otf","ProximaNova-Bold.otf","ProximaNova-Light-It.otf","ProximaNova-Medium-It.otf"};
private static HashMap<String, Typeface> fontCache = new HashMap<>();
public static Typeface getTypeface(int fontPos, Context context) {
String font = "fonts/"+fonts[fontPos];
Typeface typeface = fontCache.get(font);
if (typeface == null) {
try {
typeface = Typeface.createFromAsset(context.getAssets(), font);
} catch (Exception e) {
return null;
}
fontCache.put(font, typeface);
}
return typeface;
}
}
И ваш класс CustomTextView
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context, attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
applyCustomFont(context, attrs);
}
private void applyCustomFont(Context context,AttributeSet attrs) {
int fontPos = getFont(context,attrs);
Typeface customFont = FontCache.getTypeface(fontPos, context);
setTypeface(customFont);
}
private int getFont(Context ctx, AttributeSet attrs){
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.CustomTextView);
int customFont = a.getInt(R.styleable.CustomTextView_customFont,0);
return customFont;
}
}
создает атрибуты.XML-файл в папке res / values.Этот файл содержит варианты шрифта.Вы можете указать любое количество шрифтов, которое вам нужно.
res / values / attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomTextView">
<attr name="customFont">
<enum name="regular" value="0" />
<enum name="light" value="1" />
<enum name="medium" value="2" />
<enum name="semibold" value="3" />
<enum name="bold" value="4" />
<enum name="light_it" value="5" />
<enum name="medium_it" value="6" />
</attr>
</declare-styleable>
</resources>
Текстовое представление внутри макета
<com.t365.android.customview.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test"
app:customFont="semibold" // semibold variantion of your font is applied here // if nothing is specified here it takes base variant of your custom font
/>
Если вы не укажете какой-либо шрифт, он будет использовать базовый вариант вашего шрифта (скажем, обычный в вашем Fontawesome, как упомянуто в вопросе), который мы сделали в классе CustomTextview.
private int getFont(Context ctx, AttributeSet attrs){
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.CustomTextView);
int customFont = a.getInt(R.styleable.CustomTextView_customFont,0); // by default we are asking fontManger to take 0 variant.
return customFont;
}