Шрифт Lato: Sketch vs Android Studio

от автора

Жизнь в Avito заставила перейти на Sketch и начать рисовать в mdpi (1x). Чтобы сразу поддержать телефоны и планшеты. Так как я работаю по адаптированному под себя принципу Atomic Design.

Переход на Sketch я начал c переноса шрифтовых гайдов. Взял телефон с mdpi (1x), установил туда своё тестовое приложение с шрифтовой сеткой Avito. Начал обводить. Такое я уже делал для Photoshop. (Знать точные границы у текста мне надо, чтобы составлять точные спецификации дизайна для разработчиков)


Как оказалось, косяков (особенностей работы 🙂 ) с рендером шрифта у Android хватает. Приведу конкретный пример. Взял 2 одинаковых TextView (шрифт в одну строку, 14 Bold). Второму TextView назначил в дополнение атрибуты android:maxLines=«1» и android:ellipsize=«end» Это значит, что если текст длинный, то он покажется в одну строку с «…» на конце. В результате высота контейнера и базовая линия у второго TextView отрендерились со сдвигом в 1dp относительно первого. Были и другие странности, но не суть.

Продолжил эксперимент. Тут вспомнил про недавнее видео от Lisa Wray про работу со шрифтом. Откопал скриншоты на рабочем столе про структуру шрифта с точки зрения Android.


Подумал, погуглил. Наткнулся на атрибут android:includeFontPadding=«false». Как я понял, он убирает паддинг сверху от шрифта между top и ascent и снизу между descent и bottom (см. первый скриншот).

Добавил этот атрибут всем TextView в тестовом приложении. Начал заново смотреть. Поигрался с различными атрибутами у TextView, посравнивал — всё круто. TextView из примера выше рендерятся одинаково, без сдвигов. Начал обводить границы текста для шрифтовой сетки. Чтобы на выходе получить для Sketch вот это:

В процессе обводки заметил, что границы текстового слоя в Sketch один в один совпадают с границей TextView в Android (Studio). Попробовал другие размеры — тоже совпадают. Круто!

А что с межстрочными интервалами? Оказалось тоже всё хорошо. Для шрифта Lato Bold размером 16 параметр Line нового текстового слоя в Sketch по умолчанию равен 19. Атрибут android:lineSpacingExtra=«1sp» увеличивает межстрочный интервал на 1. Решил добавить 1 к параметру Line в Sketch. То есть стало 20. Заработало, контейнеры совпадают!

Причём высота стала на 1 больше. Добавилось это пространство снизу. То есть можно играться точным выравниванием текста у кнопок.

Вывод

Для шрифта Lato, если рисовать макеты в mdpi (1x), рендеринг шрифта в Sketch совпадает с Android (Studio), если добавить TextView атрибут android:includeFontPadding=«false»

Гипотеза

Кажется, что такое поведение справедливо для любого шрифта. А не только Lato. Надо проверять.


Кто любит читать в facebook, добавляйтесь в мою группу про Качественный Android:
www.facebook.com/groups/upscaleandroid

ссылка на оригинал статьи http://habrahabr.ru/post/270389/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *