Android P: новые возможности для работы с текстом

Все мы знаем, насколько важен компонент TextView. Вероятно, из визуальных элементов он используется чаще всего. Вот почему Google неустанно улучшает этот компонент. В новой версии SDK нам приготовил много вкусностей.

PrecomputedText

Отображение текста — весьма нетривиальная задача, состоящая их множества нюансов: множественные шрифты, межстрочный интервал, расстояние между буквами, направление текста, переносы и т.д. TextView выполняет немало работы под капотом: чтение файла шрифтов, поиск глифа, определение формы, кеширование слов и т.д. Но самое грустное, что вся эта работа ведётся в UI потоке, что может вызвать просадку фреймрейта.

По факту, оказывается, что эта работа занимает 90% всего времени по настройке. Для решения этой проблемы в Android P был добавлен новый компонент PrecomputedText(как часть Jetpack), который улучшит работу с текстом. Обратно совместимо до API 14, если использовать PrecomputedTextCompat.

PrecomputedText позволяет выполнить всю тяжёлую работу заранее, или даже в фоновом потоке, кешируя результат. Результат PrecomputedText.create(CharSequence, params) затем может быть задан TextView. После чего TextView необходимо выполнить лишь 10% оставшейся работы.

Magnifier

Даже с такой фичей как Smart Text Selection при выборе текста могут возникнуть проблемы. Android P представляет Magnifier для текста для прокачки пользовательского опыта при выделении текста.

Команда хотела, чтобы пользователи испытывали одинаковый опыт во всех приложениях, будь то пользовательские виджеты или где-то ещё. Поэтому и появился виджет Magnifier, который можно применить к любой вьюхе на экране. Виджет Magnifier позволяет задать увеличенную версию любой вьюхи или поверхности, не только текста.

У Magnifier 3 основных метода: show, update, dismiss. К примеру, можно использовать эти методы при обработке тачей, чтобы вести Magnifier вслед за пальцем пользователя:

Smart Linkify

Linkify присутствует с API 1, позволяет добавлять ссылку в текст с помощью регулярок. При этом могли возникать фризы в WebView. Чтобы улучшить ситуации в sdk были добавлены Smart Linkify, достучаться до которых можно с помощью TextClassifier API.

Smart Linkify использует специальные умные алгоритмы для нахождения объектов в тексте. Основываясь на типе сущности в тексте, затем может предложить соответствующие действия. К примеру, Smart Linkify может распознать номер телефона и предложить на выбор действия: отправить смс, позвонить, добавить в контакты.

Для ускорения всю работу по генерации и назначению ссылок перенесём в фоновый поток: