This media is not supported in your browser
VIEW IN TELEGRAM
Google на примере JetLagged показала как с помощью Jetpack Compose и библиотек от Google можно добавиться гибкого UI (читайте статью тут). Используются Flow layouts, WindowSizeClasses, movableContentOf, анимаци для плавного перехода и др. API
#compose
#compose
Forwarded from Compose Broadcast
Короткая статья с описанием того как под капотом устроена работа Compose чтобы модифицировать код с Composable аннотациями и привести его к исполняемому виду
#подкапотом #compose
#подкапотом #compose
Вышел загрузчик изображений Coil 3.0 c поддержкой 🏝 Kotlin Multiplatform. Теперь помимо 🤖 Android поддерживается iOS, JVM, JS и WASM. Подробнее тут
Что еще нового:
❗️ Изменился пакет с
👉 Можно выбрать библиотеку для работы с сетью: OkHttp или Ktor
👉 Улучшили работы с Compose Preview
❌ Убрали загрузку Android ресурсов через
❗️ По умолчанию размер декодированной картинки не будет превосходить размер 4096 на 4096
❗️ Работу с Coil 2 Parameters API заменил на
🛠 Важные улучшения и исправления
Новая версия требует внесения изменения в код. Подробное руководство читайте в руководстве по миграции
#kmp #сеть #картинки #compose
Что еще нового:
io.coil-kt
на io.coil-kt.coil3
👉 Можно выбрать библиотеку для работы с сетью: OkHttp или Ktor
👉 Улучшили работы с Compose Preview
android.resource://example.package.name/drawable/image
Extras
🛠 Важные улучшения и исправления
Новая версия требует внесения изменения в код. Подробное руководство читайте в руководстве по миграции
#kmp #сеть #картинки #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Compose Broadcast
Composable Screens - приложение с демонстрацией сложных интерфейсов, реализованных на Compose UI.
#пример #compose
#пример #compose
Автор статьи, Максим Качинкин, из ДоДо решил реализовать замер платности анимаций переходов между экранами. В статье разбирается что считается во время показа экрана, методика замера и конечно же код реализации. Рекомендую к ознакомлению
#android #анимация #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
В этом видео я собрал самые горячие новости и интересные события в мире Android
#AndroidBroadcast #Android #Kotlin #JetpackViewModel #Compose #DI #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
Что уже показали
👉 Jetpack Compose for XR
👉 Material Design for XR
👉 Jetpack SceneCore
👉 ARCore for Jetpack XR
#androidxr #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
#compose #camerax #камера #jetpack #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
Больше новостей про Jetpack Compose и Compose Broadcast вы можете найти на канала @compose_broadcast: новости, советы, лайфхаки и статьи - всё там!
Подписывайтесь и давайте добъём канал до 5 тысяч подписчиков
#compose
Подписывайтесь и давайте добъём канал до 5 тысяч подписчиков
#compose
Не используйте null для отсутcтвия состояния в UI
Сталкиваюсь с решениями разработчиков, когда они используют null для задания состояния UI по умолчанию. Мне такой подход не нравится 😡. У элементов обычно всегда есть начально состояние. Например, прогресс скрыт, данных списка нету, и др. Либо вовсе эти элементы не показываются и используется экран-заглушка
В коде я выражаю такое состояние следующим образом
также Default можно заменить на ссылку на другое состояние, и при этом не сломать код выше
Использование null вместо Default приведет к неудобным аспектам работы с кодом:
1. Придется использовать null safety или операторы Flow для работы с null
2. Любые задания начальных состояний UI элементов придется привязывать не через поле в объекте состояния, а через связывание с null состоянием
3. Расширить/изменить null нельзя, а вот класс можно дополнить полями/методами и включить в анализ кода
#android #compose #AndroidBroadcast #БазаЗнаний
Сталкиваюсь с решениями разработчиков, когда они используют null для задания состояния UI по умолчанию. Мне такой подход не нравится 😡. У элементов обычно всегда есть начально состояние. Например, прогресс скрыт, данных списка нету, и др. Либо вовсе эти элементы не показываются и используется экран-заглушка
В коде я выражаю такое состояние следующим образом
private val _screenState =
MutableStateFlow<ScreenState>(ScreenState.Default)
val screenState = _screenState.asStateFlow()
sealed interface ScreenState {
object Default : ScreenState // Иногда называю None
data class DataLoaded(...) : ScreenState
data class Loading(...): ScreenState
}
@Composable
fun MyScreen() {
val state: ScreenState by stateFlow.collectAsState()
MyScreen(state)
}
@Composable
fun MyScreen(state: ScreenState): Unit = when(state) {
is ScreenState.Default -> Default(state)
is ScreenState.Loading -> ProgressScreen(state)
is ScreenState.DataLoaded -> DataScreen(state)
}
@Composable
private fun DefaultSceen(state: ScreenState.Default)
@Composable
private fun ProgressScreen(state: ScreenState.Loading)
@Composable
private fun DataScreen(state: ScreenState.DataLoaded)
также Default можно заменить на ссылку на другое состояние, и при этом не сломать код выше
sealed interface ScreenState {
data class DataLoaded(...) : ScreenState
data class Loading(...): ScreenState
companion object {
val Default: ScreenState
get() = Loading(...)
}
}
Использование null вместо Default приведет к неудобным аспектам работы с кодом:
1. Придется использовать null safety или операторы Flow для работы с null
2. Любые задания начальных состояний UI элементов придется привязывать не через поле в объекте состояния, а через связывание с null состоянием
3. Расширить/изменить null нельзя, а вот класс можно дополнить полями/методами и включить в анализ кода
#android #compose #AndroidBroadcast #БазаЗнаний
This media is not supported in your browser
VIEW IN TELEGRAM
CameraX и Compose. Фокусировка по тапу на экран (EN,6м)
Статья с инструкцией по реализации фокусировки камеры по нажатию UI на Compose
#android #camerax #compose
Статья с инструкцией по реализации фокусировки камеры по нажатию UI на Compose
#android #camerax #compose
Вышла Jetpack Activity 1.10.0
👉 Photo Picker теперь позволяет выбрать картинки по порядку, а также задать начальную вкладку (картинки или "альбомы")
👉 PickVisualMedia и PickMultipleVisualMedia Activity Result контракты, что вызывают photo Picker больше по умолчанию не вызывают Gogole Play Services, если не найден системный Photo Picker, а будет запускать интент
⚙️ Для Compose появился новый local compostion - LocalActivity, которая предоставляет текущую Activity. Ранее надо было делать приведение типа из LocalContext
#android #jetpack #compose #jetpackupdate
👉 Photo Picker теперь позволяет выбрать картинки по порядку, а также задать начальную вкладку (картинки или "альбомы")
👉 PickVisualMedia и PickMultipleVisualMedia Activity Result контракты, что вызывают photo Picker больше по умолчанию не вызывают Gogole Play Services, если не найден системный Photo Picker, а будет запускать интент
ACTION_SYSTEM_FALLBACK_PICK_IMAGES
, которые приведет к запуску подходящей альтернативы для Photo Picker.// Надо было делать раньше
LocalContext.current as Activity
// Доступно теперь
LocalActivity.current
#android #jetpack #compose #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
В процессе перевода проекта на Jetpack Compose рано или поздно появляются вопросы: зачем нам вообще фрагменты, активити и вьюмодели, ведь можно реализовать навигацию прямо между Composable-функциями.
В приложении Мой Beeline разработчики двигаются в сторону компонентного подхода с помощью Decompose, так как он показался нам самым надёжным и стройным в своей красоте.
Своим докладом Павел Королев хочет показать, что жизнь за пределами стека Google существует. А также поделиться опытом, учитывая количество существующего кода, модульность проекта и стремление остаться в балансе с простотой решения.
#android #compose #навигация #decompose
Please open Telegram to view this post
VIEW IN TELEGRAM
Обзор способов (EN,6м) как показать картинку в App Widget при использование Glance (Compose для App Widget). Начинают с R.drawable и заканчивают интеграцией с ContentProvider и Glide
#android #appwidget #jetpack #glance #compose
#android #appwidget #jetpack #glance #compose
This media is not supported in your browser
VIEW IN TELEGRAM
Compose Preview Function Creator - плагин для Android Studio, чтобы быстро генерировать превью для Composable функций
#androidstudio #android #compose
#androidstudio #android #compose
Сгенерированные превью будут заполнены данными, не всегда идеально, но как минимум уже будет вам полезно.
#android #androidstudio #compose #gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Руководство(EN,6м) от команды CameraX по созданию эффекта как на видео, когда весь ваш UI на Compose. Используется определение лиц в кадре и наложение масок
🔗 Ссылка без VPN
#android #jetpack #camerax #камера #compose
🔗 Ссылка без VPN
#android #jetpack #camerax #камера #compose
Очень подробный гайд по тому, как оптимизировать производительность приложения через использование стабильных типов для меньшего числа рекомпозиций.
Разбираются:
👉 Что такое Stable тип
👉 Как происходит рекомпозиция
👉 Restartable и Skippable Composable функции
👉 Compose Compiler Metrics
👉 Аннотации Immutable и Stable
👉 Аннотация NonRestartableComposable
👉 Как стабилизировать Composable функции
👉 Strong Skipping Mode
#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Google объвила об отказе разработки Relay - инструмента для генерации Compose кода на основе макетов в Figma. Срок закрытия поддержки - 30 апреля 2025.
Причина закрытия проекта - появление Figma Code Connect с поддержкой Compose
#compose #figma
Причина закрытия проекта - появление Figma Code Connect с поддержкой Compose
#compose #figma