Как добавить шрифт в качестве XML-ресурса

Как создать письмо
Jetpack Compose – это рекомендуемый набор инструментов для создания интерфейсов Android. Как использовать текст в Compose

В Android 8.0 (уровень API 26) появилась возможность использовать шрифты в XML-файлах в качестве ресурсов. Вы можете добавить файл font в папку res/font/, чтобы включить шрифты в ресурсы. Эти шрифты компилируются в файле R и автоматически становятся доступны в Android Studio. Доступ к ресурсам шрифтов можно получить с помощью типа ресурса font. Например, чтобы получить доступ к ресурсу шрифта, используйте @font/myfont или R.font.myfont.

Чтобы использовать шрифты в XML на устройствах с Android 4.1 (уровень API 16) и более поздних версий, используйте библиотеку поддержки 26.0. Подробнее о том, как использовать библиотеку поддержки…

Чтобы добавить шрифты в качестве ресурсов, выполните следующие действия в Android Studio:

  1. Нажмите правой кнопкой мыши на папку res и выберите New > Android resource directory (Создать > Каталог ресурсов Android). Откроется окно Новый каталог ресурсов.
  2. В списке Тип ресурса выберите шрифт и нажмите ОК.

    Примечание. Название каталога ресурсов должно быть font.

    Как добавить каталог ресурсов шрифтов

    Рисунок 1. Добавление каталога ресурсов шрифтов.

  3. Добавьте файлы шрифтов в папку font.

    Приведенная ниже структура папок создает файлы R.font.dancing_script, R.font.lobster и R.font.typo_graphica.

    Добавление файлов шрифтов в каталог ресурсов

    Рисунок 2. Добавление файлов шрифтов в каталог res/font.

  4. Дважды нажмите на файл шрифта, чтобы посмотреть его в редакторе. Предварительный просмотр файла шрифта

    Рисунок 3. Предварительный просмотр файла шрифта.

Как создать семейство шрифтов

Семейство шрифтов – это набор файлов шрифтов, а также сведения о стиле и насыщенности. В Android можно создать новое семейство шрифтов в виде XML-ресурса и обращаться к нему как к единому целому, а не ссылаться на каждый стиль и вес как на отдельный ресурс. В этом случае система сама выберет подходящий шрифт в зависимости от стиля текста.

Чтобы создать семейство шрифтов, выполните следующие действия в Android Studio:

  1. Нажмите правой кнопкой мыши на папку font и выберите New > Font resource file (Создать > Файл ресурса шрифта). Откроется окно Новый файл ресурсов.
  2. Введите название файла и нажмите ОК. Новый XML-файл ресурса шрифта откроется в редакторе.
  3. Каждый файл шрифта, стиль и атрибут веса должны быть заключены в элемент <font>. В следующем примере XML показано, как добавить атрибуты, связанные со шрифтом, в 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>

Как использовать шрифты в XML-макетах

Используйте свои шрифты (один файл шрифта или шрифт из семейства) в объектах TextView или в стилях с помощью атрибута fontFamily.

Примечание. Когда вы используете семейство шрифтов, TextView автоматически переключается на файлы шрифтов из этого семейства.

Как добавить шрифты в TextView

Чтобы задать шрифт для TextView, выполните одно из следующих действий:

  • В XML-файле макета задайте для атрибута fontFamily файл шрифта, к которому вы хотите получить доступ.
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
  • Откройте окно Свойства, чтобы задать шрифт для элемента TextView.
    1. Выберите представление, чтобы открыть окно Свойства.

      Примечание. Окно Свойства доступно только при открытом редакторе дизайна. В нижней части окна выберите вкладку Дизайн.

    2. Разверните свойство textAppearance и выберите шрифт из списка fontFamily.
    3. Как выбрать шрифт в разделе &quot;Свойства&quot;

      Рисунок 4. Выбрать шрифт в окне Свойства.

В окне предварительного просмотра макета Android Studio, показанном на рисунке 5 справа, можно посмотреть, как выглядит шрифт, заданный в TextView.

Предварительный просмотр шрифтов в макете

Рисунок 5. Предварительный просмотр шрифтов в макете.

Как добавить шрифты в стиль

Откройте файл styles.xml и задайте для атрибута fontFamily файл шрифта, к которому хотите получить доступ.

  • <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/lobster</item>
    </style>
  • Как использовать шрифты программно

    Чтобы получить шрифты программно, вызовите метод getFont(int) и укажите идентификатор ресурса шрифта, который хотите получить. Этот метод возвращает объект Typeface. Хотя система выбирает лучший стиль на основе информации о шрифтах, вы можете использовать метод setTypeface(android.graphics.Typeface, int), чтобы задать шрифт с определенными стилями.

    Примечание. TextView делает это за вас.

    Kotlin

    val typeface = resources.getFont(R.font.myfont)
    textView.typeface = typeface

    Java

    Typeface typeface = getResources().getFont(R.font.myfont);
    textView.setTypeface(typeface);

    Как использовать библиотеку поддержки

    Библиотека поддержки версии 26.0 поддерживает шрифты в XML на устройствах с Android 4.1 (уровень API 16) и более поздних версий.

    Примечание. Если вы объявляете семейства шрифтов в макете XML с помощью библиотеки поддержки, используйте пространство имен app, чтобы шрифты загружались.

    <?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/myfont-Regular"/>
        <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
    </font-family>

    Чтобы получить шрифты программно, вызовите метод ResourceCompat.getFont(Context, int) и укажите экземпляр Context и идентификатор ресурса.

    Kotlin

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

    Java

    Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);