Недавно я столкнулся с проблемой поддельного жирного и курсивного текста при использовании семейства шрифтов в Android разработке.
В этой статье хочу рассказать об этой проблеме и о её решении.
Создание семейства шрифтов
Начиная с API 26, появилась возможность объединять шрифты в семейства.
Семейство шрифтов — это набор файлов шрифтов с указанием их стиля и веса.
Вы можете создать новое семейство шрифтов как ресурс XML и обращаться к нему как к единому элементу, вместо того, чтобы ссылаться на каждый стиль и вес как на отдельные ресурсы.
Таким образом система сможет выбрать правильный шрифт в зависимости от стиля текста, который вы пытаетесь использовать.
Пример файла:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
Вариант для Support Library
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/lobster_regular" />
<font
app:fontStyle="italic"
app:fontWeight="400"
app:font="@font/lobster_italic" />
</font-family>
Атрибут fontStyle
определяет стиль начертания шрифта — обычное(normal
) или курсивное(italic
).
В свою очередь, fontWeight
— устанавливает вес, aka насыщенность шрифта.
И конечно, font
будет задавать шрифт который будет использоваться при заданном fontWeight
и fontStyle
.
Вес шрифта
Этот стандарт пришел с web-разработки. Значение устанавливается от 100 до 900 с шагом 100.
Следующая таблица соответствует распространенным именам насыщенности:
В основном, в файле семейства шрифтов, достаточно указать только шрифты для нормального начертания — 400, и стандартного жирного — 700.
Более подробно о насыщенности шрифта читайте здесь.