Как программно установить Google Fonts .xml в TextView
Поскольку в Android Studio 3.0 вы можете просто интегрировать шрифты Google в свой проект (см. Пошаговое руководство по Android).
Когда вы добавляете какой-либо шрифт, Android Studio генерирует вам папку со шрифтом, включая XML-файл для шрифта (в моем случае amatic_sc.xml). Также Studio создает preloaded_fonts.xml в папке значений.
amatic_sc.xml:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
app:fontProviderAuthority="com.google.android.gms.fonts"
app:fontProviderPackage="com.google.android.gms"
app:fontProviderQuery="Amatic SC"
app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>
preloaded_fonts.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="preloaded_fonts" translatable="false">
<item>@font/amatic_sc</item>
</array>
</resources>
Когда я включаю следующую статическую строку в мой XML-файл, она работает нормально:
android:fontFamily="@font/amatic_sc"
Но в моем случае мне нужно программно установить семейство шрифтов в моем собственном адаптере listAdapter. Я попробовал следующие примеры кода, но ничего не работает:
// Display text with default fontFamily
viewHolder.textView.setTypeface(Typeface.create("@font/amatic_sc", Typeface.NORMAL));
// both throws java.lang.RuntimeException: Font asset not found [../res/]font/amatic_sc.xml
viewHolder.textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "font/amatic_sc.xml"));
viewHolder.textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "../res/font/amatic_sc.xml"));
// both throws java.lang.RuntimeException: Font asset not found [../res/]font/amatic_sc.xml
viewHolder.textView.setTypeface(Typeface.createFromFile("font/amatic_sc.xml"));
viewHolder.textView.setTypeface(Typeface.createFromFile("../res/font/amatic_sc.xml"));
В моем случае я использую min SDK версии 16 и надеюсь, что мой фрагмент кода будет достаточным.
Спасибо за помощь!
2 ответа
Вы можете использовать библиотеку поддержки для совместимости с версиями Android до 8, например:
Typeface typeface = ResourcesCompat.getFont(context,R.font.amatic_sc);
viewHolder.textView.setTypeface(typeface);
Больше информации здесь.
Сохраните файл шрифта в папке активов, затем используйте этот фрагмент
Typeface font = Typeface.createFromAsset(mContext.getAssets(), fontPath);
v.setTypeface(font);
notic: путь к шрифту должен
Roboto-Bold.ttf