Имеется 2 способа архивировать это
1-й способ
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.
Расширение TextView Далее мы создадим новый класс Java, который расширяет TextView.Это позволяет нам использовать этот класс во всех представлениях XML.Он наследует все функциональные возможности и свойства обычного TextView;но добавляет наш собственный шрифт.
Еще раз, мы взглянем на исходный код нашего проекта «Еда гурманов».Код может показаться сложным на секунду, но он прост:
public class EatFoodyTextView extends TextView {
public EatFoodyTextView(Context context) {
super(context);
applyCustomFont(context);
}
public EatFoodyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context);
}
public EatFoodyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
applyCustomFont(context);
}
private void applyCustomFont(Context context) {
Typeface customFont = FontCache.getTypeface("SourceSansPro-Regular.ttf", context);
setTypeface(customFont);
}
}
Первые три метода - это просто конструкторы, которые мы переопределяем для вызова одного метода applyCustomFont ().Этот метод является важной частью головоломки.Он просто получает (надеюсь, кэшированный) шрифт из нашего класса FontCache.Наконец, мы должны вызвать setTypeface () со шрифтом, и мы почти закончили.В случае, если вам интересно, мы можем вызвать setTypeface () напрямую (а не для объекта TextView), так как мы расширяем класс TextView.
Использование класса Вы можете задаться вопросом, если так много подготовкистоит усилий.В этом разделе вы увидите, что это действительно так.Потому что все, что вам осталось сделать - это использовать класс в представлении XML, и у него автоматически будет свой собственный шрифт.Нет необходимости в Java-коде!
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.futurestudio.foody.views.EatFoodyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/eat_foody_green_dark"
android:textSize="20sp"
android:text="Future Studio Blog"
android:layout_marginBottom="24dp"/>
</RelativeLayout>
Как видите, вы можете продолжать использовать все тонкости (например, textSize, textColor) TextView.Теперь просто замените все элементы классом, который мы только что создали, например, и вы применили свой собственный шрифт везде!(Ссылка: https://futurestud.io/tutorials/custom-fonts-on-android-extending-textview)
2-й способ Следуйте инструкциям Google по поддержке API от 26 (Android 8) https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml
Внесите изменения в режим просмотра текста, чтобы изменить шрифт
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textview_normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/eat_foody_green_dark"
android:textSize="20sp"
android:text="Future Studio Blog"
android:layout_marginBottom="24dp"/>
<com.futurestudio.foody.views.EatFoodyTextView
android:id="@+id/textview_custom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/eat_foody_green_dark"
android:textSize="20sp"
android:text="Future Studio Blog"
android:visibility="gone"
android:layout_marginBottom="24dp"/>
</RelativeLayout>
внимание на android:visibility="gone"
в Activity, вы используете этот код для переключения между 2 TextViews
final TextView normalTextView = findViewById(R.id.textview_normal);
final TextView customTextView = findViewById(R.id.textview_custom);
normalTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
normalTextView.setVisibility(View.GONE);
customTextView.setVisibility(View.VISIBLE);
}
});
customTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
normalTextView.setVisibility(View.VISIBLE);
customTextView.setVisibility(View.GONE);
}
});