Справочник 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(): Для рисования подчёркиваний.