Compose 1.10 представляет новую функцию
retain, которая заполняет важный пробел между существующими API управления состоянием. Теперь можно сохранять объекты между изменениями конфигурации без необходимости их сериализации!-
remember — сохраняет между рекомпозициями ❌ смена конфигурации-
rememberSavable — сохраняет между пересозданиями активити ⚠️ требует сериализации-
retain — сохраняет при смене конфигурации ✅ без сериализации ❌ не работает при убийстве процесса@Composable
fun MediaPlayer() {
val applicationContext = LocalContext.current.applicationContext
// ExoPlayer будет сохранен при повороте экрана
val exoPlayer = retain {
ExoPlayer.Builder(applicationContext)
.setSeekBackIncrementMs(5000)
.setSeekForwardIncrementMs(5000)
.build()
}
// Воспроизведение не прервется при смене конфигурации
DisposableEffect(Unit) {
onDispose { exoPlayer.release() }
}
// ...
}
Под капотом сохранение объекта происходит через механизм ViewModel и имеет такой же цикл жизни
Фича разработана при активном участии AndroidDev-сообщества, особенно команды Circuit. Отличный пример того, как обратная связь разработчиков влияет на развитие платформы!
#Compose #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64👍14❤8👎1
Разработчик из ПСБ поделился опытом создания кастомного Toolbar в Compose. Основная задача — правильное центрирование заголовка и подзаголовка при динамическом контенте слева и справа (иконки, текст переменной длины).
Решения "в лоб" не сработали:
-
Row с Weight приводит к лишним рекомпозициям- Ручной расчет ширины текста — непредсказуемо и сложно
- Проблема в разных фазах измерения Compose
Решением стал кастомный Layout. Вместо стандартных компоновок используется
Layout, который измеряет все элементы за один проход.#Compose #Android #UI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤔3👎1
Когда нужен скруглённый угол, закруглённая аватарка или обрезка по кастомной форме — используйте
clip(). Это не просто визуальный эффект: clip обрезает и содержимое, и границы, и все клики внутри.// Скруглённые углы
Box(
modifier = Modifier
.size(100.dp)
.clip(RoundedCornerShape(8.dp))
.background(Color.Blue)
)
// Круглая аватарка
Image(
painter = painterResource(id = R.drawable.avatar),
contentDescription = null,
modifier = Modifier
.size(64.dp)
.clip(CircleShape)
)
Вы можете использовать не только стандартные Shape, но и реализовать свою форму:
// Звёздочка
val starShape = object : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline {
return Outline.Generic(Path().apply {
// рисуешь путь звёздочки
})
}
}
Box(
modifier = Modifier
.size(100.dp)
.clip(starShape)
.background(Color.Yellow)
)
Если в LazyColumn много элементов с clip — это не критично для производительности, но помни:
👉
clip() работает на GPU (относительно дёшево)👉 Если в clip используется сложная форма (кастомный Path) — может работать медленнее
👉 Для списков с большим количеством элементов профилируй через Compose Layout Inspector
#Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
❤28👍15🤯3👎1
Я всегда скептически относился к Pixel Perfect тестированию UI, коим и являются Screenshot тесты: сложно, масштабируется так себе, да еще и настраиваешься тольк под определенные экраны.
Что вы думаете про Pixel Perfect тесты ?
#Compose #Тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👎12🤯11👍7🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥105👍7❤6👎1
🎄 Итоги года для @compose_broadcast
Классный год для Compose. Ключевыми событиями отмечу выход Stable Compose for iOS, а также Compose 1.10, который наконец-то смог сравняться в производительности UI под Android на View в релизных сборках со всеми оптимизация.
Канал уходит на новогодние каникулы. Встретимся с вами в 2026 в @compose_broadcast и других каналах broadcast
💬 Чем для вас отметился 2025 и что ждёте в будущем году?
Классный год для Compose. Ключевыми событиями отмечу выход Stable Compose for iOS, а также Compose 1.10, который наконец-то смог сравняться в производительности UI под Android на View в релизных сборках со всеми оптимизация.
Канал уходит на новогодние каникулы. Встретимся с вами в 2026 в @compose_broadcast и других каналах broadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉18❤11👎8🔥3👍2