Значение верха, подъема, базовой линии, спуска, дна и ведущих в Android FontMetrics


это похоже на основной вопрос, но я не мог найти похожий на SO. Во время чтения документация, у меня были проблемы с пониманием концепций. Я хочу понять, в чем разница между top и ascent и bottom и descent. И где именно находится исходная линия? У вас есть схема, которая поможет мне ее визуализировать?

2 66

2 ответа:

давайте сначала рассмотрим, что такое информация:

  • Top - максимальное расстояние над базовой линией для самого высокого глифа в шрифте при заданном размере текста.
  • подъем - рекомендуемое расстояние над базовой линией для особо размеченный текст.
  • спуск - рекомендуемое расстояние ниже базовой линии для выбранного размеченный текст.
  • дно - максимальное расстояние ниже базовой линии для самого низкого глифа в шрифте при заданном размере текста.
  • ведущий - рекомендуемое дополнительное пространство для добавления между строками текста.

отметим, что базовый то, что первые четыре измеряются. Это строка которая составляет базовый что текст сидит, хотя некоторые символы (например, g, y, j, так далее.) может иметь части, которые идут ниже линии. Это сравнимо с линиями, которые вы пишете в выровненной тетради.

вот изображение, чтобы помочь визуализировать эти вещи:

FontMetrics showing top, ascent, baseline, decent, bottom, and leading

помните, что при рисовании на холсте в Java и Android, идем вниз увеличить в y и вверх это уменьшить в y. это означает, что FontMetrics'top и ascent являются отрицательными числами, так как они измеряются от базовая линия (в то время как спуск и дно являются положительными числами). Таким образом, чтобы получить расстояние от top до bottom вам нужно будет сделать (bottom -top).

The ведущий - это расстояние между нижней и верхней части следующей строки. На картинке выше, это пространство между оранжевой линии 1 и Линии 2. Как @MajorTom указано ниже, в типографии термин более правильно определяется как "расстояние между базовые линии последовательных строк типа."* однако Android, похоже, использует этот термин в более историческом смысле. Слово (произносится "ledding") происходит от свинцовой полосы, которую старые наборщики использовали для размещения между строками типа. Это был в основном просто способ настроить межстрочный интервал. В Android я никогда не видел, чтобы ведущий был чем-то другим, кроме 0 и я не видела ничего в исходном коде. (Поправьте меня, если вы знаете, где он используется для расчета что угодно.) Вы можете изменить межстрочный интервал в TextView С setLineSpacing в коде или android:lineSpacingExtra и android:lineSpacingMultiplier в xml. эти методы, однако, не используйте и не изменяйте ведущие.

проверьте эти ссылки для получения дополнительной информации:

узнать больше

чтобы изучить метрики шрифтов больше, я сделал простой проект.

enter image description here

вместо того, чтобы перечислять весь код здесь. Я добавлен проект в GitHub. Вы можете либо клонировать проект, либо скопировать следующие файлы в новый проект.

письма когда-нибудь идут выше top или меньше bottom?

обычно нет, но они могут. Верхняя и нижняя части, как я понимаю, задаются шрифтом (следовательно, "FontMetrics"), поэтому создатель шрифтов может сделать глиф выше, чем то, что они говорят сверху (или ниже, чем внизу). Кроме того, с диакритические знаки в Unicode это может очень легко произойти. Вот довольно экстремальный пример (взято из здесь): может быть,҉ H ?s҉? ААА!

подключив эту строку в Android, мы получим следующее:

enter image description here

диакритические знаки над top и ниже bottom. Интересно отметить, что общая ширина и высота корректно измеряются по текстовым границам, хотя.

в любом случае, для всех практических целей в вашем программировании вы можете просто предположить, что max и min для букв глифа являются top и bottom. И обычно они будут оставаться в пределах ascent и decent. Если по какой-то причине вам нужно знать наверняка, если буквы выходят за рамки top или bottom можно использовать TextPaint.getTextBounds.

Leading - это не пространство между строками в типографии. Видимо это что-то Android код не учитывает. Мы сами с этим боролись. Правильное определение ведущего (из Википедии):

в типографии, ведущий /llɛdɪŋ/ относится к расстоянию между базовые линии последовательных строк типа. Термин возник в те дни рук-набирать, когда тонкие прокладки руководства были введены в формы для увеличения вертикальное расстояние между строками.

из того, что я могу сказать, Android не имеет способа указать это.