Shorts
- 🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Обычная переменная не триггерит рекомпозицию — Compose о ней просто не знает. Нужен MutableState. Создаёшь через mutableStateOf — строго типизированный объект. Теперь при каждом изменении его значения Compose автоматически запускает рекомпозицию. Никаких invalidate(), никаких ручных перерисовок. Просто присвоил новое значение — UI обновился. #JetpackCompose #MutableState #State #AndroidDev #ReactiveProgramming #КотлинРазработка #МобильнаяРазработка
- 🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Jetpack Compose — декларативный фреймворк. Ты описываешь ЧТО должно быть на экране, а не КАК это нарисовать. Когда данные меняются — Compose сам обновляет UI. Но для этого нужна рекомпозиция. Звучит сложно? На деле это просто повторный вызов composable функции с новыми данными. Вот и вся магия. #JetpackCompose #Рекомпозиция #AndroidDev #Recomposition #КотлинРазработка #МобильнаяРазработка #Программирование
- 🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Множество модификаторов текста повторяются - fontSize, fontFamily, lineHeight. Всё это можно вынести в Typography. Файл Type.kt - там определяешь стили один раз: headlineLarge, bodyMedium, labelSmall. Потом используешь style = MaterialTheme.typography.bodyMedium. Единый стиль текста по всему приложению, без дублирования. #JetpackCompose #Typography #Типографика #AndroidDev #ЧистыйКод #БестПрактис #Программирование
- 🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Создаёшь своё свойство-расширение для ColorScheme. Внутри геттер с проверкой темы - для светлой один цвет, для тёмной другой. Потом обращаешься к нему как MaterialTheme.colorScheme.subtitle. Чистая кастомизация без костылей. #JetpackCompose #Extension #CustomTheme #AndroidDev #КотлинРазработка #Кастомизация #Программирование
- 🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Иерархия цветов в Material Design. Primary - основной цвет приложения для главных элементов, кнопок. Secondary - для менее акцентированных элементов, вторичных кнопок. Tertiary - дополнительный цвет для небольших декоративных элементов, иконок, индикаторов. Правильное использование этой иерархии делает приложение визуально приятным. #MaterialDesign #JetpackCompose #ColorScheme #UIDesign #AndroidDev #Дизайн #МобильнаяРазработка
- 🎯 Обучение 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 #Программирование
