Разработка ждёт балета
1.65K subscribers
516 photos
5 videos
15 files
1.56K links
What I cannot create, I do not understand.

DM: @alexey_mileev
PeerLab: https://xn--r1a.website/+e2ND1tAa0lU2ZTli
Download Telegram
Неплохую статью прислал @duglasher. В блоге Instagram Engineering вышла статья про то, как они пилили type mode (a.k.a. лень фотографировать, просто разукрашу текст) на iOS и Android. Часть про адаптацию размера текста довольно простая, а вот часть про Span мне понравилась, есть интересные советы, которые много где могут пригодиться.

#instagram #text #span
https://instagram-engineering.com/building-type-mode-for-stories-on-ios-and-android-8804e927feba
Нашёл шпаргалку (уверен, не я один постоянно это забываю) про `FontMetrics`. И да, как всегда Android Framework во всей красе - baseline считай сам :)
#cheatsheet #font #text
Очень насыщенный доклад про рисование текста. Пока что из всех Google I/O докладов мне встретилось два настолько насыщенных доклада - этот и про Android rendering pipeline, о нём я писал выше.
Сразу порекомендую посмотреть это видео всем, кому приходится много использовать Span, особенно внутри RecyclerView.
Ну и основные highlights:
- Text stack в Android разбит на две части - Java и Native (сразу обратим внимание, что Android контролирует только три верхних уровня - всю Java часть и верхний уровень из Native - Minikin).
* Верхний уровень в Java части - это TextView и EditText, затем идут Layout, Paint и Canvas
* Native часть куда более насыщенная, пройдёмся сверху вниз: Minikin - библиотека для text measurement, line breaking и hyphenation (перенос слов), ICU - работа с Unicode, HarfBuzz - text shaping, FreeType - генерирует bitmaps для всех gliffs, Skia - основной графический движок системы
- Начиная с Android L у нас есть System Wide Word Layout LRU Cache - кэширует до 5000 слов, чтобы переиспользовать результаты обсчётов, когда это же слово снова нужно будет отрисовать
- В Android P ускорили использование simple break strategy вместе с normal или full hyphenation frequency - в детали углубляться не буду, подробности можно найти в видео
- Если с сервака, например, нам приходит строчка, в которой намешано несколько языков, и мы знаем, где какой язык используется, то для правильного переноса слов/строк текста нужно использовать LocaleSpan
- Span делятся на Paragraph spans (применяются на параграф, очевидно) и Character spans (применяются посимвольно, тоже очевидно). В свою очередь Character spans делятся на Appearance affecting (после применения нужно сделать redraw) и Metric affecting (после применения нужно сделать и remeasure, и redraw). Про написание своих Span в докладе тоже есть кусок, поэтому посмотрите, если нужно
- У нас есть три класса: SpannedString (нельзя mutable text, нельзя mutable markup), SpannableString (нельзя mutable text, можно mutable markup) и SpannableStringBuilder (можно mutable text, можно mutable markup). В докладе показали сравнение производительности SpannableString и SpannableStringBuilder (они по-разному устроены внутри: один на массиве, второй на деревьях), результаты следующие: до 250 Span они ведут себя одинаково, дальше SpannableStringBuilder выигрывает. Ну, вы поняли, что использовать :)
- Ещё я увидел интересную фишку с <annotaion/> тэгом внутри strings.xml. Допустим, у вас есть какая-то строка, переведённая на несколько языков. Вам нужно применить какой-то Span на определённое слово в этой строке. Но в одном языке это слово стоит в одном месте, а в другом языке - в другом. Вот ровно эту проблему решает <annotation/> тэг. Если такая задача перед вами стоит - сходите посмотрите.
- Если нужно отрисовать какой-то очень длинный текст, не нужно его целиком запихивать в TextView. Разбейте на параграфы и используйте RecyclerView.
- Ну и новая фишка в Android P - Magnifier. Это такая экранная лупа, которая поможет с выделением текста. Для TextView и EditText она будет работать из коробки, но и к своим custom View её можно прикрутить.
За сим откланиваюсь.

#text #span #textview #talk
https://youtu.be/x-FcOX6ErdI
Пост про StaticLayout. Первая часть (до properties включительно) - довольно хорошее интро. А вот вторую часть серьёзно всрали, на мой взгляд :)

#text #canvas #staticlayout
Вот тут рассказывают о том, почему и как изменился дизайн текстовых полей в Material.

#design #material #text
Очередной чудесный пост от Никиты Прокопова (да, опять!) про то, почему размер шрифта в наших уютных редакторах, вообще говоря, не очень-то и работает, и всё приходится подбирать заново, когда меняем один модный шрифт с лигатурами на другой.
Напомнило тот анекдот про связь ширины двигателя Space Shuttle с шириной двух древнеримских лошадиных задниц.

#font #ui #text
Казалось бы, где это видео, а где этот канал. Ну никак не должно было одно с другим пересечься. Я сам в шоке, чесслово. Но вот вам "Writing for interfaces" видос с WWDC. Там описывают подход к составлению текстов на экранах, да и к составлению самих экранов в общем-то. Когда в следующий раз сяду писать обречённый на смерть пет-проект, постараюсь не лениться и смотреть на коммуникацию с пользователем через такую вот призму, чесслово.

#talk #design #text
❤‍🔥9😁21
Прямо отличный пост с разбором только части сложностей с отрисовкой текста.

#text #font #rendering
👍2
История появления UTF-8. Роб Пайк и Кен Томпсон буквально за пару дней нафигачили спеку и встроили в Plan 9 OS.

#history #text #encoding
🔥3
Очень хорошо поднимают проблему редактирования текстов в мобильных интерфейсах. Прямо жиза, всегда плевался с этого. Если не хочется много читать, хотя бы посмотрите видео подхода, который они предлагают. Выглядит интересно.

#text #keyboard #mobile
6👍2
Вышел пост Никиты Tonsky про unicode, UTF-8 и т.п. Как всегда отличная работа, и как всегда горячо рекомендую прочесть.

#text #encoding #unicode
👍32
Видали, Github новые модные шрифты сделали.

#font #github #text
9👍1