Skip to content

Справочник API: Шрифты и управление

Класс Font управляет отрисовкой текста, FontMgr отвечает за обнаружение шрифтов, а FontFeature позволяет использовать расширенные возможности OpenType.

Font

Font принимает Typeface и добавляет размер, масштаб, наклон и атрибуты рендеринга.

Создание

java
// Шрифт по умолчанию (обычно 12pt без засечек)
Font font = new Font();

// Пользовательский шрифт и размер
Font font = new Font(typeface, 24f);

// Сжатый/Расширенный или Наклонный текст
Font font = new Font(typeface, 24f, 0.8f, -0.25f);
  • new Font(): Инициализирует значениями по умолчанию.
  • new Font(typeface): Инициализирует указанным шрифтом и размером по умолчанию.
  • new Font(typeface, size): Инициализирует указанным шрифтом и размером.
  • new Font(typeface, size, scaleX, skewX): Полный конструктор.

Метрики и интервалы

  • getSize() / setSize(value): Типографский размер в пунктах.
  • getScaleX() / setScaleX(value): Горизонтальный масштаб (1.0 — нормальный).
  • getSkewX() / setSkewX(value): Горизонтальный наклон (0 — нормальный).
  • getMetrics(): Возвращает подробные FontMetrics.
  • getSpacing(): Рекомендуемый межстрочный интервал (сумма подъёма, спуска и интерлиньяжа).

Флаги рендеринга

Влияют на то, как растрируются глифы.

  • setSubpixel(boolean): Запрашивает субпиксельное позиционирование для более плавного текста.
  • setEdging(FontEdging): Управляет сглаживанием (ALIAS, ANTI_ALIAS, SUBPIXEL_ANTI_ALIAS).
  • setHinting(FontHinting): Управляет корректировкой контуров глифов (NONE, SLIGHT, NORMAL, FULL).
  • setEmboldened(boolean): Аппроксимирует жирное начертание увеличением ширины штриха.
  • setBaselineSnapped(boolean): Привязывает базовые линии к позициям пикселей.
  • setMetricsLinear(boolean): Запрашивает линейно масштабируемые метрики (игнорирует хинтинг и округление).
  • setBitmapsEmbedded(boolean): Запрашивает использование растровых изображений в шрифтах вместо контуров.

Измерение текста

java
// Простое измерение ширины
float width = font.measureTextWidth("Hello");

// Получение точной ограничивающей рамки
Rect bounds = font.measureText("Hello");

// Измерение ширины с определёнными эффектами рисования
float width = font.measureTextWidth("Hello", paint);
  • measureText(string) / measureText(string, paint): Возвращает ограничивающую рамку.
  • measureTextWidth(string) / measureTextWidth(string, paint): Возвращает ширину продвижения.
  • getWidths(glyphs): Получает продвижения для каждого ID глифа.
  • getBounds(glyphs) / getBounds(glyphs, paint): Получает ограничивающие рамки для каждого ID глифа.

Доступ к глифам

  • getStringGlyphs(string): Преобразует текст в массив ID глифов.
  • getUTF32Glyph(unichar): Возвращает ID глифа для одного символа.
  • getUTF32Glyphs(uni): Возвращает ID глифов для массива символов.
  • getStringGlyphsCount(string): Возвращает количество глифов, представленных текстом.
  • getPath(glyph): Возвращает контур Path для одного глифа.
  • getPaths(glyphs): Возвращает контуры для массива глифов.

FontMgr

FontMgr (Менеджер шрифтов) управляет обнаружением и загрузкой файлов шрифтов.

Доступ к менеджеру

  • FontMgr.getDefault(): Возвращает глобальный менеджер шрифтов по умолчанию.

Поиск шрифтов

java
FontMgr mgr = FontMgr.getDefault();

// Поиск по имени и стилю
Typeface inter = mgr.matchFamilyStyle("Inter", FontStyle.BOLD);

// Поиск с системными запасными вариантами для определённых символов (например, Emoji)
Typeface emoji = mgr.matchFamilyStyleCharacter(null, FontStyle.NORMAL, null, "🧛".codePointAt(0));
  • matchFamilyStyle(familyName, style): Находит наиболее подходящий шрифт.
  • matchFamiliesStyle(families[], style): Пытается найти по нескольким именам семейств по порядку.
  • matchFamilyStyleCharacter(familyName, style, bcp47[], character): Находит шрифт, поддерживающий определённый символ Юникода.
  • getFamiliesCount(): Возвращает количество семейств шрифтов, доступных в системе.
  • getFamilyName(index): Возвращает имя семейства шрифтов.

Загрузка шрифтов

  • makeFromFile(path) / makeFromFile(path, ttcIndex): Загружает шрифт из файла.
  • makeFromData(data) / makeFromData(data, ttcIndex): Загружает шрифт из памяти.

FontFeature

FontFeature включает возможности OpenType, такие как лигатуры, кернинг или альтернативные глифы.

java
// Включение определённых возможностей
FontFeature[] features = FontFeature.parse("cv06 cv07 +liga");

// Создание вручную
FontFeature kernOff = new FontFeature("kern", 0);
  • FontFeature.parse(string): Разбирает возможности из строки (например, "+liga -kern").
  • new FontFeature(tag): Включает возможность (значение = 1).
  • new FontFeature(tag, value): Устанавливает для возможности определённое значение.
  • new FontFeature(tag, value, start, end): Применяет возможность к определённому диапазону текста.

FontMetrics

Подробные измерения, масштабированные размером шрифта.

  • getTop() / getBottom(): Границы выше/ниже базовой линии (максимальные).
  • getAscent() / getDescent(): Средние границы (подъём — отрицательный).
  • getLeading(): Рекомендуемое пространство между строками.
  • getCapHeight(): Высота заглавных букв.
  • getXHeight(): Высота строчных букв.
  • getThickness() / getUnderlinePosition(): Для рисования подчёркиваний.