Вес шрифта загружаемого шрифта не работает android
Я следовал этому официальному руководству и хотел использовать шрифт Poppins для своего проекта. Шрифт изменился, но свойство веса шрифта, похоже, не работает.
У меня есть стиль, определенный следующим образом:
<style name="TextAppearance.SectionTitle" parent="TextAppearance.MaterialComponents.Headline4">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#223263</item>
<item name="android:fontWeight">700</item>
<item name="fontWeight">700</item>
</style>
И я применяю это так:
<TextView
...
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/category"
android:textStyle="bold"
android:textFontWeight="700"
style="@style/TextAppearance.SectionTitle"
/>
Как видите, я пробовал несколько способов, но пока ни один из них не увенчался успехом. Цвет и размер шрифта меняются в соответствии со стилем, который я определил, но жирный эффект не регистрируется.
Вот результат, который я получаю:
Ожидаемый результат:
Мой poppins.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="Poppins"
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/poppins</item>
<item>@font/poppins_bold</item>
</array>
</resources>
3 ответа
Я не уверен, что это правильное исправление, но мне удалось решить его, заменив вес шрифта семейством шрифтов внутри моего style
тег следующим образом:
<style name="TextAppearance.SectionTitle" parent="TextAppearance.MaterialComponents.Headline4">
...
<item name="android:fontFamily">@font/poppins_bold</item>
<item name="fontFamily">@font/poppins_bold</item>
</style>
Для этого вам нужно добавить полужирный шрифт выбранного вами шрифта в свои ресурсы:
Вы пробовали этот ответ ? Мы реализовали его с помощью шрифта Inter Google Font, и он работал хорошо, отображая правильный вес.
res / font / inter.xml
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font
android:font="@font/inter_thin"
android:fontStyle="normal"
android:fontWeight="100"
app:font="@font/inter_thin"
app:fontStyle="normal"
app:fontWeight="100" />
<font
android:font="@font/inter_extralight"
android:fontStyle="normal"
android:fontWeight="200"
app:font="@font/inter_extralight"
app:fontStyle="normal"
app:fontWeight="200" />
<font
android:font="@font/inter_light"
android:fontStyle="normal"
android:fontWeight="300"
app:font="@font/inter_light"
app:fontStyle="normal"
app:fontWeight="300" />
<font
android:font="@font/inter_regular"
android:fontStyle="normal"
android:fontWeight="400"
app:font="@font/inter_regular"
app:fontStyle="normal"
app:fontWeight="400" />
<font
android:font="@font/inter_medium"
android:fontStyle="normal"
android:fontWeight="500"
app:font="@font/inter_medium"
app:fontStyle="normal"
app:fontWeight="500" />
<font
android:font="@font/inter_semibold"
android:fontStyle="normal"
android:fontWeight="600"
app:font="@font/inter_semibold"
app:fontStyle="normal"
app:fontWeight="600" />
<font
android:font="@font/inter_bold"
android:fontStyle="normal"
android:fontWeight="700"
app:font="@font/inter_bold"
app:fontStyle="normal"
app:fontWeight="700" />
<font
android:font="@font/inter_extrabold"
android:fontStyle="normal"
android:fontWeight="800"
app:font="@font/inter_extrabold"
app:fontStyle="normal"
app:fontWeight="800" />
<font
android:font="@font/inter_black"
android:fontStyle="normal"
android:fontWeight="900"
app:font="@font/inter_black"
app:fontStyle="normal"
app:fontWeight="900" />
</font-family>
Все файлы ttf для шрифта Inter помещаются в
res/font
также.
Это пример того, как мы применяем его к стилям TextView:
res / values / styles.xml
<style name="TextAppearance.Medium">
<item name="android:fontFamily">@font/inter</item>
</style>
или
<style name="Whatever">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:fontFamily">@font/inter</item>
</style>
Надеюсь, примеры будут полезны кому-то другому
Я столкнулся с тем же самым - я не уверен
textFontWeight
корректно работает со загружаемыми шрифтами. Может быть, это не предлагает приложению загрузить шрифт для этого веса?
Вы можете исправить это, создав ресурс шрифта для каждого веса, который вы хотите использовать. Попробуйте добавить этот ресурс шрифта:
poppins_bold.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="name=Poppins&weight=700"
app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>
Возможно, вам также придется добавить запись в
res/layout/values/preloaded_fonts.xml
:
<item>@font/poppins_bold</item>
Затем ссылайтесь на него с помощью
android:fontFamily="@font/poppins_bold
.
FWIW, те же изменения будут сгенерированы, если вы добавите шрифт, выбрав вес в редакторе макетов , но мне проще просто продублировать ресурс шрифта и отредактировать
fontProviderQuery
.