Telegram Web Link
#Article #Blog #UI

Drawing custom text spans in Compose UI

Автор статьи, ориентируясь на разнообразные подчеркивания текста в приложении BuzzKill, решил вручную реализовать их в Jetpack Compose. Результат - небольшая готовая библиотека ExtendedSpans. Об этапах реализации, а также достигнутых результатах — в сегодняшней статье.
👍5🔥2
#Article #Blog

movableContentOf and movableContentWithReceiverOf

Не так давно Jorge Castillo (автор книги Jetpack Compose Internals) создал блог “Effective Android”, в котором он публикует различные полезные материалы по Android разработке (естественно большая часть посвящена Compose).
В одной из таких статей разбираются функции movableContentOf и movableContentWithReceiverOf, которые позволяют нам сохранять состояние UI-контента и передавать его в последующие вызовы.

▫️P.S. В одном из предыдущих постов мы уже частично разбирали movableContentOf , может помочь для лучшего понимания
▫️P.S.S. В своем недавнем докладе я также уделял внимание этому механизму (ссылка с таймкодом)
👍4🔥2
​​#Release #Compose #Changelog

Compose Release Digest (29.06 — 04.08)

Традиционный дайджест (в обновленном формате) по основным изменениям последних релизов библиотек фреймворка, среди которых:

🔹RC/Stable🔹

🔸🔸Compose Compiler (1.2.0)
▫️ Добавлена поддержка версий Kotlin 1.7.0
🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.2.0-rc03 — 1.2.0)
▫️ В AnimatedImageVector добавлена поддержка repeatCount и repeatMode.
▫️ LazyVerticalGrid и LazyHorizontalGrid теперь stable.
▫️ Добавлен так называемый “Focus-driven-scrolling” для Lazy-списков при помощи нового BeyondBoundsLayout API.

🔹Alpha/Beta🔹

🔸🔸Compose Compiler (1.3.0-beta01 — 1.3.0-rc02)
▫️Добавлена поддержка версий Kotlin 1.7.10
🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.3.0-alpha01 — 1.3.0-alpha02)
▫️Добавлен LookaheadLayout — новый layout, о котором уже был ранее пост на канале. (Подробнее)
▫️Добавлена возможность анимации cursorBrush компонента BasicTextField без необходимости перезапускать таймер курсора. (Подробнее)
▫️Исправлен баг с открытием клавиатуры, когда disabled текстовое поле находится в фокусе. (Подробнее)
▫️В DrawScope добавлена новая функция drawText, для отрисовки multi-styled текста на Compose Canvas. (Подробнее)
▫️Исправлена проблема с AnimatedVisibility из FloatingActionButton в Scaffold. (Подробнее)

Также были обновлены и различные дополнения Compose, а именно:

▫️Compose для Wear, а также дополнения compose-material и compose-navigation для него получили сразу два параллельных обновления — 1.0.0 и 1.1.0-alpha02
▫️Compose Material 3 (Material You) обновлен до версии 1.0.0-alpha15
👍8🔥31
#Article #Blog #Animation

Velocity Based Animation with Compose

Неплохая статья, в которой разбирается такая техника, как Velocity Based Animation (проще говоря “Анимация, основанная на скорости”), которая позоляет отслеживать скорость прокрутки списка и при помощи этого кастомизировать длительность применяемой анимации.
👍51
#Article #Medium #Performance

Comparing Jetpack Compose performance with XML

Статья с сравнением производительности Compose и XML-based экранов на основе таких показателей, как количество задержек отдельных кадров, а также скорость загрузки всей страницы. Материал особенно будет полезен для тех, кто собирается попробовать Jetpack Compose в production коде, но хотел бы для начала изучить результаты benchmark-ов.
7👍4🔥1
#Article #Medium #Performance #Recomposition

Optimizing Recomposition in Jetpack Compose: Stability System

Одной из ключевых особенностей Compose является Умная рекомпозиция (Smart recomposition), которая заключается в пропуске рекомпозиции для тех Composable функций, у которых значения входных параметров не изменились и являются стабильными.

В этом смысле, стабильность является достаточно важной концепцией, потому как именно она гарантирует, что Compose Runtime сможет безопасно считывать и сравнивать эти входные данные, чтобы, при необходимости, пропустить рекомпозицию.

Подробнее о том, что же всё-таки такое “стабильность” и “stability system” в Compose — в сегодняшней статье.
👍51
​​#Article #Blog #Performance

6 Jetpack Compose Guidelines to Optimize Your App Performance

Статья с большим количеством советов (разбитых на 6 правил) о том, как можно значительно улучшить производительность вашего приложения на Compose. Авторы затрагивают такие темы как стабильность классов (о которой был предыдущий пост), правильный вынос state-ов (State hoisting), и много чего ещё. Рекомендую к прочтению.
👍5🔥1
#Article #Blog #Compose

Custom Layouts, measuring policies, and BoxWithConstraints in Jetpack Compose

Небольшая статья о том, как происходит определение размеров дочерних элементов при создании своего Layout-а в Compose, при чём тут MeasurePolicy, а также чем так необычен BoxWithConstraints. Обо всем этом — в сегодняшнем материале.
4👍3🔥1
​​#Release #Compose #Changelog

Compose Release Digest (05.08 — 12.09)

После небольшого перерыва возвращаемся с традиционным дайджестом по основным изменениям последних релизов библиотек фреймворка, среди которых:

🔹RC/Stable🔹

🔸🔸Compose Compiler (1.3.0 — 1.3.1)
🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.2.1)
▫️ Несколько минорных изменений по сравнению с 1.2.0

🔹Alpha/Beta🔹

🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.3.0-alpha03 — 1.3.0-beta02)
▫️Для функций Crossfade, animateAsState и Animatable добавлен новый опциональный параметр label. (Подробнее)
▫️В AnimationSpec добавлена функция atFraction, при помощи которой указанную продолжительность анимации можно делить на сегменты, которые можно в дальнейшем использовать для работы с ключевыми кадрами анимации. (Подробнее)
▫️TextInputService (show/hideSoftwareKeyboard) теперь deprecated. Вместо этого нужно использовать SoftwareKeyboardController. (Подробнее)
▫️Реализовано и задокументировано новое экспериментальное API для LazyStaggeredGrid. (Подробнее)
▫️Исправлена ошибка, из-за которой painterResource не обновлялся при изменении конфигурации. (Подробнее)
▫️FocusDirection.In и FocusDirection.Out теперь deprecated и заменены на FocusDirection.Enter и FocusDirection.Exit. (Подробнее)
▫️Исправлен баг, при котором Compose компилятор в некоторых случаях ошибочно помечал Unit типы как Composable. (Подробнее)

Также были обновлены и различные дополнения Compose, а именно:

▫️Paging-Compose обновлен до версии 1.0.0-alpha16
▫️Compose для Wear, а также дополнения compose-material и compose-navigation для него получили сразу два параллельных обновления — 1.0.2 и 1.1.0-alpha05
▫️Compose Material 3 (Material You) обновлен до версии 1.0.0-beta02
🔥3👍21
#Article #Blog #Compose

Measuring and drawing in Jetpack Compose

В дополнение к предыдущей статье об определении размеров дочерних элементов, в сегодняшнем материале автор разбирает как устроены измерение и отрисовка самого Composable компонента.
1👍1
#Article #Blog #Compose

Jetpack Compose Accompanist TwoPane

Интересная статья от разработчиков Microsoft, в которой они разбирают TwoPane — UI компонент из библиотеки Accompanist, предназначенный для разработки адаптивных интерфейсов под foldable устройства.
🔥31👍1
#Article #Medium

Building A Jetpack Compose Window With AbstractComposeView

Бывают кейсы, когда нужно открыть Composable контент поверх Android View (при постепенной интеграции Compose в существующий проект), и для этого не подойдут Dialog или Popup. В таком случае автор статьи предлагает использовать кастомное решение, основанное на AbstractComposeView и называет его "Jetpack Compose Window".
🔥5👍2👎1
​​#Release #Compose #Changelog

Compose Release Digest (13.09 — 12.10)

Традиционный дайджест по основным изменениям последних релизов библиотек фреймворка, среди которых:

🔹RC/Stable🔹

🔸🔸Compose Compiler (1.3.2)
▫️Добавлена поддержка версий Kotlin 1.7.20
🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.3.0-rc01)
▫️
Добавлен новый API Hyphens для поддержки автоматических переносов при работе с текстом. (Подробнее)
▫️Улучшены Snapping-анимации. (Подробнее)
▫️Исправлена утечка памяти у LazyColumn из-за невызова метода onModifierLocalsUpdated. (Подробнее)

🔹Alpha/Beta🔹

🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.3.0-beta03)
▫️В LazyStaggeredGrid добавлены параметр contentPadding и поддержка различных Arrangement. (Подробнее тут и тут)
▫️Добавлен класс MutableWindowInsets для удобного изменения WindowInsets без рекомпозиции. (Подробнее)
▫️PullRefresh из библиотеки Accompanist мигрировал в Material SDK. (Подробнее)
▫️Параметр функций remember и rememberCoroutineScope теперь crossinline.
▫️Добавлен LineBreak API для кастомизации переносы строк при работе с текстом. (Подробнее)
▫️Исправлена проблема, при которой Activity BackHandler из AndroidX не работал с Dialog composable. (Подробнее)

Также были обновлены и различные дополнения Compose, а именно:

▫️Paging-Compose обновлен до версии 1.0.0-alpha16
▫️Compose для Wear, а также дополнения compose-material и compose-navigation для него обновлены до версии 1.1.0-alpha07
▫️Compose Material 3 (Material You) обновлен до версии 1.0.0-rc01
👍3🔥21
#Article #Medium

How To Handle ViewModel One-Time Events In Jetpack Compose

Автор статьи разбирает такую тему, как обработка one-time событий в приложении с Compose, а также сравнивает классический подход с использованием библиотеки Compose-State-Events.

P.S. Для тех, кому неудобно читать в текстовом варианте, добавил также видеоверсию материала.
3👍1🔥1
#Featured #AndroidDevSummit #Video #Compose

Reimagining designer-developer handoff: Introducing Relay

Одним из самых ярких анонсов Google с прошедшего Android Dev Summit однозначно стал Relay — новый UI инструмент для перевода моделей дизайна из Figma в код Jetpack Compose, а также их дальнейшей синхронизации. Подробнее о том, как работает новинка — в небольшом видеодокладе с конференции.

A также:
🔸Страница Relay на developer.android.com
🔸Страница Relay на material.io
👍41👏1
#Featured #AndroidDevSummit #Video #Compose

UI improvements in Compose

Значительная часть докладов на прошедшем AndroidDevSummit была посвящена различным аспектам работы с UI в Jetpack Compose.

Собрал для вас все видео в одном месте:

🔸Reimagining designer-developer handoff: Introducing Relay — презентация инструмента Relay (подробнее о нём рассказывал ранее).

🔸5 quick animations to make your Compose app stand out — краткая демонстрация пяти простых анимаций, которые гарантированно улучшат восприятие вашего приложения.

🔸Styling text in Compose — примеры стилизации текста при помощи Material API.

🔸Write your first Compose UI test — введение в написание вашего первого UI теста для Compose.

🔸Material You in Compose apps — знакомство с Material 3 Jetpack Compose библиотекой (которая теперь Stable), а также разбор миграции с Material 2.

🔸State of the art of Compose tooling — знакомство с инструментами Compose Tooling в Android Studio, а также разбор примеров работы с ними.

🔸Custom layouts and graphics in Compose — большой (по сравнению с остальными) доклад по созданию собственных layout-ов в Compose.
🔥9👍4
#Featured #AndroidDevSummit #Video #Compose

Compose Modifiers deep dive

Доклад от небезызвестного Leland Richardson, в котором он предлагает глубже погрузиться в историю модификаторов Compose, а также связанных с ними проблем и ограничений. Ну и самое интересное, рассказывает об изменениях Modifier API — как о тех, на которые уже переехали в версии 1.3, так и о тех, которые добавят в 1.4.
👍3🔥1
А ещё, совсем недавно мы преодолели очень важную цифру — 1000 человек на канале 🔥

Практически за два года мы выросли с нуля до самого большого ресурса в Telegram, полностью посвященного Compose. И это, безусловно, наша общая победа.

Спасибо за поддержку, будем держать планку и развиваться дальше!
🔥25👍4🎉2👎1
​​#Release #Compose #Changelog

Compose Release Digest (13.10 — 12.11)

Традиционный дайджест по основным изменениям последних релизов библиотек фреймворка, среди которых:

🔹RC/Stable🔹

🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.3.0 — 1.3.1)
▫️Добавлены экспериментальные функции LazyVerticalStaggeredGrid и LazyHorizontalStaggeredGrid.
▫️Исправлены проблемы производительности BeyondBoundsLayout. (Подробнее)
▫️Добавлен компонент Pull-To-Refresh. (Подробнее)
▫️Максимально поддерживаемое значение elevation для диалогов и popup-ов уменьшено до 8dp.
▫️Добавлено новое экспериментальное API — Modifier.Node (как более производительная альтернатива Modifier.composed).

🔹Alpha/Beta🔹

🔸🔸Compose Compiler (1.4.0-alpha01)
▫️Исправлена работа компилятора с K/JS версии 1.7.20
🔸🔸Compose Animation/Foundation/Material/Runwww.tg-me.com/UI (1.4.0-alpha01 — 1.4.0-alpha02)
▫️Добавлены WindowInsets.imeAnimationSource и WindowInsets.imeAnimationTarget для определения прогресса анимации и работы с IME. (Подробнее)
▫️В компоненты BasicText/BasicTextField/Text/TextField/OutlinedTextField добавлен параметр minLines для контроля их минимальной высоты на основе количества строк. (Подробнее тут и тут)
▫️Метод forEachGesture() теперь deprecated в пользу awaitEachGesture(). (Подробнее)
▫️SnapshotStateList и SnapshotStateMap теперь имеют явные реализации в виде методов toList() и toMap(). (Подробнее)
▫️Для TextStyle/SpanStyle/Paragraph/MultiParagraph добавлен экспериментальный атрибут DrawStyle для дополнительной настройки текста . (Подробнее)
▫️В Modifier.Node добавлен метод invalidateSubtree() для возможности удаления целых иерархий для отрисовки (Подробнее).

Также были обновлены и различные дополнения Compose, а именно:

▫️Paging-Compose обновлен до версии 1.0.0-alpha17
▫️Compose для Wear, а также дополнения compose-material и compose-navigation для него обновлены до версии 1.1.0-rc01
▫️Compose Material 3 (Material You) обновлен до версий 1.0.1 и 1.1.0-alpha02
👍8🔥1
#Article #Medium #Animation

Making Jellyfish move in Compose: Animating ImageVectors and applying AGSL RenderEffects

Любопытная статья, в которой автор показывает как можно создать нетривиальную анимацию медузы (!!!), по пути охватывая такие темы как:
▫️Создание кастомных ImageVectors из SVG
▫️Частичная анимация ImageVector
▫️Применение эффекта шума к Composable при помощи AGSL RenderEffect
🥰5👍41
2025/07/09 03:10:16
Back to Top
HTML Embed Code: