Подтвердить что ты не робот

Значение вершины, восхождения, базовой линии, спускового механизма, нижней части и ведущих в Android FontMetrics

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

4b9b3361

Ответ 1

Давайте сначала рассмотрим, что говорит :

  • Верх. Максимальное расстояние выше базовой линии для самого высокого глифа шрифта при заданном размере текста.
  • Восхождение. Рекомендуемое расстояние выше базовой линии для выделенного текста.
  • Спуск. Рекомендуемое расстояние ниже базовой линии для выделенного текста с интервалом.
  • Bottom. Максимальное расстояние ниже базовой линии для самого низкого глифа шрифта при заданном размере текста.
  • Ведущий. Рекомендуемое дополнительное пространство для добавления строк текста.

Обратите внимание, что Базовая линия - это то, из чего измеряются первые четыре. Это строка, которая формирует base, на которой сидит текст, даже если некоторые символы (например, g, y, j и т.д.) Могут иметь части, которые идут ниже строки, Это сопоставимо с строками, которые вы пишете в выложенном ноутбуке.

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

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

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

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

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

Исследуйте больше

Для более детального изучения Font Metrics я сделал простой проект.

enter image description here

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

Будут ли буквы выше top или ниже bottom?

Не обычно, но они могли. Верх и низ, как я их понимаю, задаются шрифтом (следовательно, "FontMetrics" ), поэтому создатель шрифтов может сделать глиф выше, чем то, что, по их словам, верхний (или ниже нижнего). Кроме того, с сочетанием диакритических знаков в Unicode это может очень легко случиться. Вот довольно экстремальный пример (взятый из здесь): M ̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚ a ͔̟̝͔ͥ̈́̏ͮͯ̇͆̊̒ͦͦ͘͢͜ y ̵̴̢͕̝̩̱͈͕̼̣͕̟̌͗̾ͤ̎͌̄ͣͨ͊ͬ b ̡̯̰̪̜͙̟̝̠͚̜̥̙̤̃ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈́̀́͡͠ e ̵ͯͪ̿̿̂̄ͫ̃҉͏͎̣̹̱̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭͟ ̣̞͙͚̝̰̞̹̗̲̣͙͍͍̀̓͊̂̋ͣ̏̑̍̊͌ͩ͐̎̀ͣͣ̚͟ͅ h ̛͋̏̍̆ͤ͛͐ͨ̌̋ͤ̎̂ͨ̂̓̑̚̕͟͏̻̣͖̖͚͚͓̲̼̪ ȁ ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ͅ ṱ ̱̼̖̓̂ͭ̏̅͂ͥ͌ͯ͌͠ s ͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̪̬͎͍̥̬? ̡̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛́͝ ̧̦̼̘͕̪̠̙͖̦̯̦̘͉͈͕͔̘̻̲͑ͨ̊̈́̐ͫ͐̌ͯ̀͘͝ Ḩ ̷̸̸̹͉̩̜̹̞ͯ̃̃ͧͬͨ̌̀̾̐̈̇ͧ͛̃͐̀ͦ͞ A ̴̦̗̬̠͙̭͉̟̺͇̭̰͔͕̯̅̃͋ͪ̈́̉̓̌ͯ̈́͆̋̀ͤ̇̂̿̈́̂͡͡ Ṱ ̲͎͉̣̳̺̱̜̦̬͕̣͉͇͊̌ͥ͐͒̈́̓́ͥ́́̋͂̅ͬ̆͗ͥ̕͢͡ S ̍ͧ͗̒͗̂̈ͬ͊̚̚͢͏̗̣̳ͅ! ̶̨̡͇͚̙͚̭̱̣̲̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑̃̎͡

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

введите описание изображения здесь

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

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

Ответ 2

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

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

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