🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Размещая контент внутри функции MaterialTheme, ты получаешь доступ к цветам темы.
MaterialTheme.colorScheme.primary, secondary, onBackground.
Эти цвета автоматически меняются в зависимости от темы устройства - светлая или тёмная.
Не нужно писать if/else для проверки темы.
#JetpackCompose #MaterialTheme #ТемнаяТема #AndroidDev #UIDesign #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Любой composable элемент можно сделать кликабельным. Text, Image, Box - что угодно.
Просто добавь модификатор .clickable { } с обработчиком клика.
Не нужны специальные компоненты типа ImageButton. Это и есть сила модификаторов - они универсальны.
#JetpackCompose #Clickable #Модификаторы #AndroidDev #Интерактивность #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Чтобы ripple-эффект работал корректно, ему нужно знать когда начинается и заканчивается взаимодействие.
Для этого используется InteractionSource - он временно хранит информацию о том, что происходит с элементом (нажат, есть фокус).
Без InteractionSource ripple не знает когда применять анимацию.
#JetpackCompose #Ripple #InteractionSource #AndroidDev #UIEffects #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Для модификаторов критически важен порядок.
Они применяются снизу вверх, как цепочка преобразований.
Сделал clip(CircleShape) после clickable - ripple останется квадратным, потому что он применился раньше.
Поставил clip перед clickable - ripple обрежется вместе с элементом.
Порядок имеет значение.
#JetpackCompose #Модификаторы #ОшибкиНовичков #AndroidDev #ВерсткаUI #БестПрактис #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Как сделать кнопки одинаковой ширины в Row?
Добавь Modifier.weight(1f) к каждой кнопке. Это говорит, что элемент должен занимать равную долю доступного пространства.
Три кнопки с weight(1f) - каждая займёт 1/3 ширины контейнера.
Адаптивная вёрстка без костылей.
#JetpackCompose #Weight #Модификаторы #АдаптивнаяВёрстка #AndroidDev #ВерсткаUI #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Alignment и Arrangement часто путают.
Alignment управляет тем, ГДЕ именно элемент находится внутри контейнера - слева, справа, по центру.
Arrangement определяет, КАК распределяется пространство МЕЖДУ элементами - SpaceEvenly, SpaceBetween, SpaceAround.
Разные задачи, разные инструменты.
#JetpackCompose #Layout #Alignment #AndroidDev #ВерсткаUI #МобильнаяРазработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Ставишь horizontalAlignment = Alignment.CenterHorizontally, а ничего не меняется.
Проблема в том, что ширина контейнера по умолчанию равна ширине контента, wrap_content по сути. Центрировать особо нечего.
Добавь модификатор fillMaxWidth() - и элементы выровняются по центру как надо.
#JetpackCompose #Alignment #AndroidDev #ОшибкиНовичков #ВерсткаUI #МобильнаяРазработка #Программирование
🎯 Обучающая платформа c AI: https://androidsprint.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Первое с чем сталкивается каждый новичок - элементы накладываются друг на друга.
Compose по умолчанию не знает как располагать элементы.
Нужно явно указать с помощью layout контейнеров.
Column - вертикально друг под другом, Row - горизонтально в ряд.
Это основа основ.
#JetpackCompose #ОшибкиНовичков #Layout #AndroidDev #ВерсткаUI #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Preview - одна из киллер-фич Compose.
Composable функции отрисовываются прямо в Android Studio, без сборки проекта и установки APK.
Добавляешь аннотацию @Preview, жмёшь Split - и видишь результат. Изменил код - обновил превью.
Экономия времени колоссальная по сравнению с XML.
#JetpackCompose #AndroidStudio #Preview #Productivity #AndroidDev #МобильнаяРазработка #ЭкономияВремени
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Scaffold - это базовый каркас экрана, строительные леса если дословно.
Он автоматически рассчитывает системные отступы, чтобы контент не перекрывал статусбар и навбар.
Можешь добавить TopBar, BottomBar, FAB. Android Studio при создании проекта сразу предлагает использовать Scaffold, это хорошая практика.
#JetpackCompose #Scaffold #AndroidDev #ВерсткаUI #БестПрактис #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Пишешь 16.dp и оно просто работает. Что это вообще такое?
dp - это свойство-расширение класса Int в Kotlin. Оно преобразует число в пиксели, независимые от плотности экрана.
dp для размеров элементов, sp для размеров шрифтов.
Удобный синтаксис вместо Resources.getDimensionPixelSize().
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Зачем нужен Modifier, если у Text и так куча параметров?
Параметры функции отвечают за внешний вид самого текста - цвет, размер, шрифт.
А Modifier управляет поведением и размещением - отступы, фон, размеры, можно повесить слушатель кликов.
Модификатор универсален и работает с любыми элементами.
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Composable функция ничего не возвращает.
Нет return View, нет return Layout.
UI рисуется исключительно за счёт вызова метода.
Вызвал функцию - отрисовался элемент.
Это декларативность в чистом виде, непривычно для тех, кто пришёл с XML.
#JetpackCompose #Декларативность #AndroidDev #КотлинРазработка #МобильнаяРазработка #ITОбразование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Composable функции можно вызывать только из других Composable. Это как с suspend функциями - нельзя вызвать из обычной функции.
Зато обычные функции внутри Composable вызывать можно.
Если провалиться в любую Composable функцию, увидишь аннотацию @Composable.
#JetpackCompose #AndroidDev #КотлинРазработка #ОшибкиНовичков #Coroutines #Программирование #ITОбразование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Открываешь Compose проект в Android Studio - а каталога layout нет. Его действительно больше нет.
Весь UI теперь на Kotlin, никаких XML файлов для разметки. Можно создать гибридный проект, где часть на XML, часть на Compose, но это уже для миграции.
#JetpackCompose #AndroidDev #КотлинРазработка #МобильнаяРазработка #СовременныйAndroid #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Потому что они описывают сущности - элементы интерфейса. Концептуально это нечто осязаемое на экране.
Поэтому по стилю Compose они пишутся как классы, с заглавной буквы.
#JetpackCompose #KotlinDev #AndroidDev #Программирование #Compose #AndroidРазработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Compose - это не просто новый синтаксис, это новая философия! 🚀
СТАРЫЙ СПОСОБ (XML):
❌ Пишем XML layout
❌ findViewById для каждой View
❌ Вручную обновляем UI при изменении данных
❌ 50+ строк для простого экрана
НОВЫЙ СПОСОБ (Compose):
✅ Всё в одном месте (Kotlin)
✅ Никаких findViewById
✅ UI обновляется автоматически
✅ 20 строк для того же экрана
Секрет: вместо описания "КАК" создать UI (императивно),
вы просто декларируете "ЧТО" хотите видеть!
Compose сам разбирается как это нарисовать. Магия? Нет, декларативность! ✨
#compose #android #jetpackcompose #kotlin #androidразработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Ситуация: пишешь код в Compose, всё вроде правильно, а компилятор ругается на .weight() — "не найдено" ❌
Разгадка: Каждый контейнер в Compose = отдельная "комната" 🏠
Это как зайти в мастерскую с молотком и гвоздями — покрасить стены не получится, нет краски 🎨
Понял концепцию = никогда больше не получишь эту ошибку! 💪
#compose #android #jetpackcompose #kotlin #androidразработка #мобильнаяразработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Trailing lambda в Kotlin — фундаментальная фича для создания DSL!
Суть: если последний параметр функции — лямбда, можно вынести её за скобки в { }.
Это превращает обычный код в читаемый синтаксис как в Jetpack Compose, Gradle Kotlin DSL, Ktor и других библиотеках.
#kotlin #dsl #kotlindsl #android #программирование #jetpackcompose
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Мощный DSL скрыл всю сложность: тебе не нужно лезть в дебри Android UI.
Есть готовые компоненты (Button, Text, Column) — собираешь их как детали Lego и радуешься результату. ✨
Никакой магии, только удобство и скорость разработки!
#compose #android #jetpackcompose #kotlin #androidразработка
