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

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

Solutions Collecting From Web of "Значение верхнего, восхождения, базовой линии, спускового механизма, дна и ведущего в Android FontMetrics"

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

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

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

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

FontMetrics показывает верхнюю, восходящую, базовую, приличную, нижнюю и ведущую

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

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

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

  • Точный чертеж для Android
  • Метрики шрифтов на Java (и Android)
  • Документация по макету
  • Ошибка Java: FontMetrics неправильно?
  • FontMetrics не работает при запуске на устройстве Android. Симулятор отлично
  • Метка Java Font (Java не используется top и bottom )

Узнайте больше

Чтобы исследовать Font Metrics больше, я сделал простой проект.

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

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

  • FontMetricsView.java (пользовательский вид)
  • MainActivity.java
  • activity_main.xml

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

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

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