Другое

Руководство по семействам шрифтов TextView в Android

Узнайте, как изменить семейство шрифтов TextView в Android, используя шрифты sans-serif, serif, monospace. Решите проблему с неработающим Arial в нашем руководстве.

Как изменить fontFamily у TextView в Android

Я пытаюсь изменить семейство шрифтов у TextView в Android, но не вижу никаких предопределённых шрифтов. Как можно выбрать один из предопределённых шрифтов? Мне не нужно определять собственный Typeface; я просто хочу использовать другой шрифт, отличающийся от стандартного.

Вот мой текущий XML‑layout:

xml
<TextView
    android:id="@+id/HeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="52dp"
    android:gravity="center"
    android:text="CallerBlocker"
    android:textSize="40dp"
    android:fontFamily="Arial"
/>

Моя попытка задать android:fontFamily="Arial" не срабатывает. Как правильно изменить семейство шрифтов у TextView в Android?

Вы сталкиваетесь с проблемой, потому что Arial не является предопределённым семейством шрифтов в Android. В Android есть собственный набор встроенных семейств шрифтов, которые можно использовать напрямую в XML‑разметке. Чтобы изменить семейство шрифтов у TextView, необходимо использовать одно из предопределённых названий, например sans-serif, serif, monospace или cursive.

Содержание


Понимание предопределённых шрифтов Android

Android предоставляет несколько встроенных семейств шрифтов, которые доступны на всех устройствах. Эти шрифты являются частью системы и не требуют дополнительной настройки или файлов ресурсов. Согласно Stack Overflow, для определения шрифтов в макетах существуют три основных атрибута XML:

  • android:fontFamily – основной атрибут для установки семейства шрифтов
  • android:typeface – устаревший атрибут для базовых типов шрифтов
  • android:textStyle – для установки стилей шрифта, таких как полужирный, курсив

Атрибут android:fontFamily является рекомендуемым подходом для современной разработки Android и поддерживает как системные шрифты, так и пользовательские.

Как использовать предопределённые шрифты в XML

Чтобы использовать предопределённые шрифты, просто замените "Arial" на одно из встроенных названий семейства шрифтов Android. Вот как изменить ваш TextView:

xml
<TextView
    android:id="@+id/HeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="52dp"
    android:gravity="center"
    android:text="CallerBlocker"
    android:textSize="40dp"
    android:fontFamily="sans-serif"  <!-- Используйте встроенное семейство шрифтов Android -->
/>

Вы также можете комбинировать семейство шрифта с текстовым стилем для дополнительных вариантов:

xml
<TextView
    android:id="@+id/HeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="CallerBlocker"
    android:textSize="40dp"
    android:fontFamily="sans-serif-light"
    android:textStyle="bold"  <!-- При желании комбинируйте с текстовым стилем -->
/>

Доступные предопределённые шрифты

Android предоставляет обширный набор предопределённых семейств шрифтов. Согласно подробной информации из Stack Overflow, вот доступные варианты:

Варианты семейства sans-serif (на основе Roboto)

  • sans-serif – Roboto Regular
  • sans-serif-light – Roboto Light
  • sans-serif-condensed – Roboto Condensed
  • sans-serif-black – Roboto Black
  • sans-serif-medium – Roboto Medium
  • sans-serif-thin – Roboto Thin
  • sans-serif-smallcaps – Carrois Gothic SC (Small Caps)

Другие семейства шрифтов

  • serif – Noto Serif Regular
  • monospace – Droid Sans Mono
  • cursive – Dancing Script Regular
  • casual – Coming Soon
  • serif-monospace – Cutive Mono

Полная таблица ссылок на семейства шрифтов

Имя семейства шрифтов Соответствующий TTF-файл Доступность в версии Android
sans-serif Roboto-Regular.ttf Все версии
sans-serif-light Roboto-Light.ttf Android 4.1+
sans-serif-condensed RobotoCondensed-Regular.ttf Android 4.1+
sans-serif-black Roboto-Black.ttf Android 4.1+
sans-serif-medium Roboto-Medium.ttf Android 4.1+
sans-serif-thin Roboto-Thin.ttf Android 4.1+
sans-serif-smallcaps CarroisGothicSC-Regular.ttf Android 4.1+
serif NotoSerif-Regular.ttf Android 4.1+
monospace DroidSansMono.ttf Все версии
cursive DancingScript-Regular.ttf Android 4.1+
casual ComingSoon.ttf Все версии
serif-monospace CutiveMono.ttf Android 4.1+

Примечание: Некоторые семейства, такие как sans-serif-light, sans-serif-condensed и т.д., были введены в Android 4.1 (Jelly Bean). Для максимальной совместимости с более старыми устройствами используйте sans-serif, serif, monospace и cursive.

Программный подход к установке семейства шрифтов

Если вы предпочитаете устанавливать семейство шрифтов программно, можно использовать следующий подход:

java
import android.graphics.Typeface;
import android.widget.TextView;

// Метод 1: Использование ResourcesCompat (рекомендуется для Android 4.1+)
Typeface typeface = ResourcesCompat.getFont(context, R.font.your_custom_font);
textView.setTypeface(typeface);

// Метод 2: Использование системных шрифтов напрямую
Typeface sansSerifLight = Typeface.create("sans-serif-light", Typeface.NORMAL);
textView.setTypeface(sansSerifLight);

// Метод 3: Для предопределённых шрифтов (работает со всеми версиями Android)
Typeface serifTypeface = Typeface.SERIF;
textView.setTypeface(serifTypeface);

Согласно CodeRavo, использование ResourcesCompat.getFont() является рекомендуемым подходом для современной разработки Android, поскольку обеспечивает лучшую обратную совместимость.


Использование пользовательских шрифтов

Если вам нужен шрифт, который не предопределён в Android, вы можете добавить пользовательские шрифты в приложение:

  1. Добавьте файл шрифта: Поместите ваш .ttf или .otf файл в каталог res/font/
  2. Ссылайтесь в XML: Используйте синтаксис @font/font_name
xml
<TextView
    android:fontFamily="@font/roboto_slab"
/>
  1. Или программно:
java
Typeface typeface = ResourcesCompat.getFont(context, R.font.roboto_slab);
textView.setTypeface(typeface);

Как упомянуто в руководстве Repeato, вы также можете создать файлы ресурсов шрифтов, щёлкнув правой кнопкой мыши по папке шрифтов и выбрав «New > Font resource file» для более организованного управления шрифтами.

Распространённые проблемы с шрифтами и решения

Проблема: Семейство шрифта не работает

Решение: Убедитесь, что вы используете правильные названия семейств шрифтов. Android не распознаёт общие названия шрифтов, такие как “Arial”, “Times New Roman” и т.д. Используйте предопределённые семейства Android.

Проблема: Шрифт не отображается на старых устройствах

Решение: Некоторые семейства, например sans-serif-light, были введены в Android 4.1. Для максимальной совместимости используйте sans-serif, serif, monospace и cursive, которые доступны во всех версиях Android.

Проблема: Неправильный вес или стиль шрифта

Решение: Комбинируйте android:fontFamily с android:textStyle для правильного оформления:

xml
android:fontFamily="sans-serif"
android:textStyle="bold"

Заключение

Изменение семейства шрифтов у TextView в Android простое, если вы понимаете доступные предопределённые варианты. Ключевые выводы:

  1. Используйте предопределённые семейства: Замените "Arial" на встроенное семейство, например "sans-serif", "serif", "monospace" или "cursive".
  2. Выберите правильный вариант: Android предлагает несколько вариантов семейства sans-serif, включая light, condensed, black, medium и thin для Android 4.1+.
  3. Комбинируйте с текстовым стилем: Используйте android:textStyle с bold, italic или bold|italic для дополнительного оформления.
  4. Учитывайте совместимость: Для приложений, поддерживающих старые версии Android, придерживайтесь базовых семейств, доступных с ранних версий.
  5. Пользовательские шрифты при необходимости: Для шрифтов, отсутствующих в системе, добавьте их в каталог res/font/ и ссылайтесь через @font/font_name.

Чтобы исправить вашу конкретную проблему, замените android:fontFamily="Arial" на android:fontFamily="sans-serif" или любое другое предопределённое семейство из списка выше.

Источники

  1. How to change fontFamily of TextView in Android - Stack Overflow
  2. How to Change FontFamily of TextView in Android - Repeato
  3. Using Custom and Downloadable Fonts in Android - Mindorks
  4. Customizing TextView Font Family in Android Apps – CodeRavo
  5. How to change font Family of textView In Android - Tutorialspoint
  6. Valid values for android:fontFamily and what they map to - Stack Overflow
  7. What is the default font family in Android? - Stack Overflow
Авторы
Проверено модерацией
Модерация