Функция «Загружаемые шрифты» позволяет API запрашивать шрифты у приложения-поставщика вместо того, чтобы добавлять файлы в приложение или позволять приложению загружать шрифты. Функция «Загружаемые шрифты» доступна на устройствах с Android API версии 14 и выше через библиотеку AndroidX Core.
Загружаемые шрифты предлагают следующие преимущества:
Уменьшает размер приложения, тем самым увеличивая вероятность успешной установки приложения.
Улучшает общую работоспособность системы, поскольку несколько приложений могут использовать один и тот же шрифт через поставщика. Это экономит мобильный трафик, память телефона и дисковое пространство. В этой модели шрифт загружается по сети по мере необходимости.
Для практического ознакомления с загружаемыми шрифтами ознакомьтесь с примером приложения DownloadableFonts .
Как работают загружаемые шрифты?
Поставщик шрифтов — это приложение, которое извлекает шрифты и кэширует их локально, чтобы другие приложения могли запрашивать шрифты и обмениваться ими. Этот процесс показан на рисунке ниже.
Рисунок 1. Процесс загрузки шрифтов.
Основы
Функцию загружаемых шрифтов можно использовать следующими способами, которые подробно обсуждаются в последующих разделах:
Используйте загружаемые шрифты с Android Studio и сервисами Google Play
Вы можете настроить приложение на загрузку шрифтов, используя Android Studio 3.0 или более поздней версии. Чтобы начать работу с функциями загружаемых шрифтов, воспользуйтесь поставщиком шрифтов из сервисов Google Play.
В редакторе макетов выберите TextView . Затем в разделе «Атрибуты» выберите fontFamily > «Другие шрифты» . Рисунок 2. Использование редактора макетов . Появится окно «Ресурсы» .
В меню «Источник» выберите «Google Fonts» .
В поле «Шрифты» выберите шрифт в области «Загружаемые».
Выберите Создать загружаемый шрифт и нажмите ОК . Рисунок 3. Выбор шрифта в окне «Ресурсы» .
Android Studio автоматически генерирует соответствующие XML-файлы, необходимые для корректного отображения шрифта в вашем приложении.
Рисунок 4. Предварительный просмотр файла шрифта.
Используйте загружаемые шрифты программно
Начиная с Android 8.0 (API уровня 26), AndroidX Core обеспечивает полную поддержку загружаемых шрифтов. Подробнее об использовании библиотеки AndroidX Core см. в разделе «Загружаемые шрифты» на этой странице.
Чтобы использовать функцию загружаемых шрифтов программно, взаимодействуйте с двумя ключевыми классами:
Ваше приложение получает шрифты от поставщика шрифтов с помощью API FontsContract . Каждый поставщик имеет собственные ограничения на поддерживаемые версии Android и языки запросов. Подробнее о версиях Android и формате запросов см. в документации вашего поставщика.
Чтобы загрузить шрифт, выполните следующие действия:
Создайте экземпляр класса android.graphics.fonts.FontRequest для запроса шрифта у поставщика. Для создания запроса передайте следующие параметры:
Поставщик шрифтов.
Пакет поставщика шрифтов для проверки личности поставщика.
Строковый запрос шрифта. Подробнее о форматах запросов см. в документации поставщика шрифтов, например, Google Fonts .
Список наборов хешей сертификатов для проверки личности поставщика.
Переопределите метод onTypefaceRetrieved() , чтобы сообщить о завершении запроса шрифта. Передайте полученный шрифт в качестве параметра. Этот метод можно использовать для установки необходимого шрифта. Например, можно установить шрифт для TextView .
Вызовите метод FontsContract.requestFont() , чтобы получить шрифт от поставщика шрифтов. Метод инициирует проверку наличия шрифта в кэше. Если шрифт недоступен локально, он вызывает поставщика шрифтов, асинхронно извлекает шрифт и передает результат в функцию обратного вызова. Передайте следующие параметры:
Экземпляр класса android.graphics.fonts.FontRequest
Обратный вызов для получения результатов запроса шрифта
Обработчик для загрузки шрифтов в потоке
Следующий пример кода иллюстрирует общий процесс загрузки шрифтов:
Котлин
valrequest=FontRequest("com.example.fontprovider.authority","com.example.fontprovider","my font",certs)valcallback=object:FontsContract.FontRequestCallback(){overridefunonTypefaceRetrieved(typeface:Typeface){// Your code to use the font goes here....}overridefunonTypefaceRequestFailed(reason:Int){// Your code to deal with the failure goes here....}}FontsContract.requestFonts(context,request,handler,null,callback)
Ява
FontRequestrequest=newFontRequest("com.example.fontprovider.authority","com.example.fontprovider","my font",certs);FontsContract.FontRequestCallbackcallback=newFontsContract.FontRequestCallback(){@OverridepublicvoidonTypefaceRetrieved(Typefacetypeface){// Your code to use the font goes here....}@OverridepublicvoidonTypefaceRequestFailed(intreason){// Your code to deal with the failure goes here....}};FontsContract.requestFonts(context,request,handler,null,callback);
Дополнительную информацию о загрузке шрифта от поставщика шрифтов см. в примере приложения DownloadableFonts .
Используйте загружаемые шрифты с AndroidX Core
AndroidX Core обеспечивает поддержку функции загружаемых шрифтов на устройствах с Android API версии 14 и выше. Пакет androidx.core.provider содержит классы FontsContractCompat и FontRequest для реализации обратно-совместимой поддержки функции загружаемых шрифтов. Классы AndroidX содержат методы, аналогичные методам фреймворка, а процесс загрузки шрифтов аналогичен описанному в разделе этой страницы, посвящённом программному использованию загружаемых шрифтов .
Чтобы загрузить шрифты с помощью AndroidX, импортируйте классы FontsContractCompat и FontRequest из пакета androidx.core.provider . Создайте экземпляры этих классов вместо классов фреймворка FontsContract и android.graphics.fonts.FontRequest .
Добавить зависимость AndroidX Core
Чтобы использовать классы FontsContractCompat и FontRequest , необходимо изменить зависимости classpath вашего проекта приложения в среде разработки.
Чтобы добавить AndroidX Core в проект вашего приложения, добавьте следующую зависимость в файл build.gradle вашего приложения:
Android 8.0 (API уровня 26) и AndroidX Core предлагают более быстрый и удобный способ объявить пользовательский шрифт как ресурс в XML-макете. Это означает, что нет необходимости добавлять шрифт в качестве ресурса. Вы можете определить пользовательский шрифт для всей темы, что повышает удобство использования шрифтов с различными насыщенностями и стилями, такими как жирный, средний или светлый, если они предусмотрены.
Создайте новый XML-файл в папке res/font .
Добавьте корневой элемент <font-family> и задайте атрибуты, связанные со шрифтом, как показано в следующем примере XML-файла:
В XML-файле макета файл обозначается как @font/font_file_name . Вы также можете использовать метод getFont() для программного извлечения файла, например, getFont(R.font.font_file_name) .
Предварительно объявить шрифты в манифесте
Расширение макета и получение ресурсов — синхронные задачи. По умолчанию первая попытка получения шрифтов инициирует запрос к поставщику шрифтов, что увеличивает время первого получения. Чтобы избежать задержки, можно заранее объявить шрифты, которые необходимо получить, в манифесте. После того, как система получит шрифт от поставщика, он будет доступен немедленно. Если получение шрифта занимает больше времени, чем ожидалось, система прерывает процесс получения и использует шрифт по умолчанию.
Чтобы предварительно объявить шрифты в манифесте, выполните следующие действия:
Создайте массив ресурсов в res/values/arrays.xml и объявите шрифты, которые вы хотите предварительно загрузить.
Если поставщик шрифтов не предустановлен или вы используете библиотеку AndroidX Core, укажите сертификаты, которыми подписан поставщик шрифтов. Система использует эти сертификаты для проверки подлинности поставщика шрифтов.
Для добавления сертификатов выполните следующие действия:
Создайте массив строк с данными сертификата. Подробнее о данных сертификата см. в документации поставщика шрифтов.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-13 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-13 UTC."],[],[]]