Как добавить шрифт в Android Studio

Чтобы добавить кастомный шрифт в Android Studio, достаточно положить файл .ttf или .otf в папку res/font и сослаться на него через атрибут android:fontFamily — но именно на этапе именования файла и подключения чаще всего возникают ошибки сборки. Если после добавления шрифта проект перестал компилироваться или текст в приложении не изменился, причина почти всегда в неправильном имени ресурса или неверном пути к файлу.

В этой статье разберём все рабочие способы подключения шрифтов: через папку ресурсов, программно из кода и через Downloadable Fonts из Google Fonts. Также рассмотрим типичные ошибки вроде «resource linking failed» и объясним, почему шрифт может отображаться в превью, но не на устройстве.

Подготовка файла шрифта

Перед добавлением убедитесь, что файл шрифта имеет расширение .ttf (TrueType) или .otf (OpenType) — именно эти форматы поддерживает Android. Файлы .woff и .woff2, распространённые в вебе, напрямую не подойдут, их нужно конвертировать.

Ключевое требование — имя файла. Оно должно состоять только из строчных латинских букв, цифр и подчёркиваний. Имя Roboto-Bold.ttf вызовет ошибку сборки, а roboto_bold.ttf — нет. Это ограничение системы ресурсов Android, и обойти его нельзя.

  • 📄 Проверьте расширение: только .ttf или .otf
  • 🔤 Переименуйте файл в нижний регистр: my_font.ttf
  • 🚫 Уберите дефисы, пробелы, кириллицу и заглавные буквы из имени
  • ⚖️ Убедитесь, что лицензия шрифта разрешает встраивание в приложение
⚠️ Внимание: если файл шрифта скачан из интернета, проверьте его лицензию. Многие коммерческие шрифты запрещают встраивание в мобильные приложения без отдельной лицензии, и это юридический риск, а не технический.

Способ 1: добавление шрифта через папку res/font

Это стандартный и рекомендуемый способ, поддерживаемый начиная с Android 8.0 (API 26) и через библиотеку совместимости — на более старых версиях. Откройте проект в режиме отображения Project, кликните правой кнопкой по папке res и выберите New → Android Resource Directory. В поле Resource type укажите font и подтвердите создание.

После этого скопируйте подготовленный файл шрифта в появившуюся папку res/font. Android Studio автоматически проиндексирует ресурс, и он станет доступен по имени файла без расширения: R.font.my_font в коде и @font/my_font в XML.

☑️ Добавление шрифта через res/font

Выполнено: 0 / 5

Подключение шрифта в XML-разметке

Самый простой вариант — указать шрифт прямо в атрибутах TextView. Для этого используется атрибут android:fontFamily, значением которого служит ссылка на ресурс:

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:fontFamily="@font/my_font"

android:text="Пример текста" />

Если шрифт нужен сразу для нескольких элементов, разумнее вынести его в стиль или тему. Создайте в res/values/styles.xml стиль с атрибутом fontFamily и применяйте его через style="@style/MyTextStyle". Так изменение шрифта во всём приложении потребует правки одной строки.

📊 Какой способ подключения шрифтов вы используете чаще?
Папка res/font и XML
Программно из кода
Downloadable Fonts
Font Family XML с несколькими начертаниями

Подключение шрифта программно

Иногда шрифт требуется установить динамически — например, по настройке пользователя. В Kotlin это делается через ResourcesCompat, который работает и на старых версиях Android:

val typeface = ResourcesCompat.getFont(context, R.font.my_font)

textView.typeface = typeface

Метод ResourcesCompat.getFont() может вернуть null, если ресурс не найден, поэтому в Kotlin результат стоит обрабатывать как nullable. Для Java-синтаксиса логика та же: получаете объект Typeface и присваиваете его текстовому полю через setTypeface().

Обратите внимание: загрузка шрифта — не бесплатная операция. Если один и тот же Typeface применяется ко многим элементам, загрузите его один раз и переиспользуйте объект, а не вызывайте getFont() повторно для каждого TextView.

Способ 2: Downloadable Fonts из Google Fonts

Альтернатива ручному добавлению — Downloadable Fonts. Шрифт не упаковывается в APK, а скачивается системой при первом запуске и кешируется. Это уменьшает размер установочного файла, что особенно заметно при использовании нескольких начертаний.

В Android Studio есть встроенный мастер: в редакторе разметки выделите TextView, найдите атрибут fontFamily в панели атрибутов и в выпадающем списке выберите More Fonts. Откроется окно с каталогом Google Fonts, где можно выбрать шрифт — среда сама создаст необходимые XML-файлы и запись в манифесте.

Что именно создаёт мастер Downloadable Fonts

При выборе шрифта Android Studio генерирует XML-файл в res/font с описанием семейства, добавляет в AndroidManifest.xml мета-данные с массивом сертификатов провайдера шрифтов и создаёт файл res/values/font_certs.xml. Всё это можно отредактировать вручную при необходимости.

⚠️ Внимание: Downloadable Fonts требуют на устройстве поддержку со стороны провайдера шрифтов (обычно это сервисы Google Play). На устройствах без них механизм может не сработать — тестируйте приложение на целевой аудитории устройств или используйте локальное добавление через res/font.

Работа с несколькими начертаниями: Font Family XML

Когда у шрифта есть несколько весов — Regular, Bold, Italic — каждый можно добавить отдельным файлом. Но удобнее объединить их в семейство через XML-описание. Создайте в res/font файл, например my_font_family.xml, со следующим содержимым:

<font-family xmlns:android="http://schemas.android.com/apk/res/android">

<font

android:font="@font/my_font_regular"

android:fontWeight="400"

android:fontStyle="normal" />

<font

android:font="@font/my_font_bold"

android:fontWeight="700"

android:fontStyle="normal" />

</font-family>

После этого при подключении @font/my_font_family система сама подберёт нужный файл по запрошенному textStyle и весу. Атрибут android:textStyle="bold" в разметке автоматически задействует жирное начертание из семейства.

Сравнение способов добавления шрифта

СпособРазмер APKОфлайн-работаСложность
Папка res/fontУвеличиваетсяДаМинимальная
Font Family XMLУвеличиваетсяДаСредняя
Программно (getFont)УвеличиваетсяДаСредняя
Downloadable FontsНе увеличиваетсяПосле первой загрузкиНизкая (мастер)

Типичные ошибки и их решение

Ошибка «resource linking failed» или «file-based resource names must contain only lowercase a-z, 0-9, or underscore» при сборке означает недопустимое имя файла. Переименуйте файл по правилам из первого раздела и выполните Build → Clean Project, затем Rebuild Project.

Вторая частая ситуация: шрифт виден в превью редактора, но на устройстве текст остаётся системным. Возможные причины — кеш сборки, опечатка в имени ресурса (@font/myfont вместо @font/my_font) или то, что шрифт переопределяется в применённой теме. Проверьте стили и тему активности: атрибут fontFamily в теме имеет приоритет.

  • 🧹 Выполните Clean Project и Rebuild Project
  • 🔍 Сверьте имя ресурса в XML с именем файла посимвольно
  • 🎨 Проверьте, не переопределяет ли тема приложения fontFamily
  • 📱 Протестируйте на реальном устройстве, а не только в превью
⚠️ Внимание: превью в Layout Editor может показывать шрифт, даже если на устройстве он не применится — редактор и система рендерят ресурсы по-разному. Финальную проверку всегда делайте на эмуляторе или физическом устройстве.

Часто задаваемые вопросы

Какие форматы шрифтов поддерживает Android?

Нативно поддерживаются .ttf (TrueType) и .otf (OpenType). Веб-форматы .woff и .woff2 напрямую не работают — их нужно предварительно конвертировать в TTF или OTF.

Почему сборка падает с ошибкой после добавления шрифта?

Наиболее вероятная причина — недопустимое имя файла. Оно должно содержать только строчные латинские буквы, цифры и подчёркивания. Переименуйте файл и выполните пересборку проекта через Build → Rebuild Project.

Можно ли добавить шрифт для всего приложения сразу?

Да. Укажите атрибут android:fontFamily в теме приложения (файл themes.xml или styles.xml) — тогда шрифт применится ко всем текстовым элементам, где он не переопределён явно.

Работают ли кастомные шрифты на старых версиях Android?

Папка res/font и XML-семейства официально поддерживаются с Android 8.0 (API 26). Для более ранних версий используйте ResourcesCompat.getFont() из библиотеки совместимости AndroidX — он обеспечивает обратную совместимость.

Что лучше: локальный шрифт или Downloadable Fonts?

Локальный шрифт надёжнее: он работает офлайн и не зависит от сервисов Google. Downloadable Fonts выигрывает в размере APK, но требует провайдера шрифтов на устройстве. Для приложений с одним-двумя начертаниями локальный вариант обычно предпочтительнее.