Все уже видели, что нас ждет Android O. Ну а я буду ленивой скотиной и просто процитирую кусок доков. "Android O allows you to instruct a TextView to let the size of the text expand or contract automatically to fill its layout based on the TextView's characteristics and boundaries. This setting makes it easier to optimize the text size on different screens with dynamic content." Вот так-то! Пис 🤘🏻
#androido #textview
https://developer.android.com/preview/features/autosizing-textview.html
#androido #textview
https://developer.android.com/preview/features/autosizing-textview.html
Android Developers
Autosizing TextViews | Android Developers
Возможно, это баян, который дошел до меня с лютейшим опазданием, но все рано лови. Автор описывает, как он улучшил производительность скролла (не обращай внимания на ListView, оно и для RecyclerView вполне релевантно), просто заранее обрезав текст, который не влезал в ширину. Это, разумеется, не очень частый случай, но все таки полезно иметь в виду. Пис 👋🏻
#android #textview #performance
http://martinadamek.com/2011/01/04/performance-of-android-listview-containing-textviews/
#android #textview #performance
http://martinadamek.com/2011/01/04/performance-of-android-listview-containing-textviews/
Martin Adamek
Performance of Android ListView containing TextViews
Few minutes ago I radically improved performance of the ListView scrolling in my application. Problem was not so obvious, so I though it might be worth sharing this tip. Every item in my ListView contains four TextViews. Using Traceview I have found that…
Очень насыщенный доклад про рисование текста. Пока что из всех Google I/O докладов мне встретилось два настолько насыщенных доклада - этот и про Android rendering pipeline, о нём я писал выше.
Сразу порекомендую посмотреть это видео всем, кому приходится много использовать
Ну и основные highlights:
- Text stack в Android разбит на две части - Java и Native (сразу обратим внимание, что Android контролирует только три верхних уровня - всю Java часть и верхний уровень из Native - Minikin).
* Верхний уровень в Java части - это
* 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 - в детали углубляться не буду, подробности можно найти в видео
- Если с сервака, например, нам приходит строчка, в которой намешано несколько языков, и мы знаем, где какой язык используется, то для правильного переноса слов/строк текста нужно использовать
-
- У нас есть три класса:
- Ещё я увидел интересную фишку с
- Если нужно отрисовать какой-то очень длинный текст, не нужно его целиком запихивать в
- Ну и новая фишка в Android P -
За сим откланиваюсь.
#text #span #textview #talk
https://youtu.be/x-FcOX6ErdI
Сразу порекомендую посмотреть это видео всем, кому приходится много использовать
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
YouTube
Best practices for text on Android (Google I/O '18)
This session will cover common usages of text in Android apps, and common pitfalls developers fall into that can be avoided. Topics to be covered include styling with spans, working with editable text, measuring your own text, when and how to use different…
Чувак качественно накидал про
https://medium.com/google-developers/prefetch-text-layout-in-recyclerview-4acf9103f438
#androidp #textview #precomputedtext
PrecomputedText API, что с ним можно делать и, главное, как это можно делать. Напомню, что это та самая штука, которая позволяет вытащить часть работы по обсчёту текста на фоновый поток.https://medium.com/google-developers/prefetch-text-layout-in-recyclerview-4acf9103f438
#androidp #textview #precomputedtext
Medium
Prefetch Text Layout in RecyclerView
To layout text on Android, the system does a lot of work. Each glyph is resolved — dependent on font, locale, size, font features (like…
@lndmflngs делится своей библиотекой
#library #textview #drawable
compound-text-view. Эта приблуда позволяет задавать gravity для TextView drawable. Автор говорит, что "критика только приветствуется". Оцените!#library #textview #drawable
GitHub
GitHub - imbeerus/compound-text-view: Change gravity of Image Drawable in TextView 🌌
Change gravity of Image Drawable in TextView 🌌. Contribute to imbeerus/compound-text-view development by creating an account on GitHub.