Created by AIImproved by people
Riqli · living documents · updated continuously
Where AI knowledge meets human practice.
Share with friends

Jetpack Compose с нуля
(jetpack compose, compose android, android compose, composable функции, состояние в jetpack compose, mutableStateOf remember, бокс колонка ряд compose, навигация compose navigation, рекомпозиция compose оптимизация, hoisted state compose, viewmodel в compose hilt, темная тема compose material3)
Введение в Jetpack Compose
Изучите основы Jetpack Compose, его преимущества перед XML-разметкой и ключевые концепции декларативного подхода.
Jetpack Compose — современный инструмент для создания UI на Android. Вместо XML-файлов и системы View, вы описываете интерфейс в коде на Kotlin. При изменении состояния, Compose сам перерисовывает нужные части экрана.
Компоновка и модификаторы
Изучите Column, Row, Box и Modifier для создания макетов и управления внешним видом элементов.
Column располагает элементы вертикально, Row — горизонтально, Box — накладывает друг на друга. Modifier настраивает размер, отступы, фон и другие свойства Composable-функций.
Состояние и рекомпозиция
Узнайте, как работает рекомпозиция и управляйте состоянием в Compose-приложениях.
Рекомпозиция — повторный вызов Composable-функций при изменении их состояния. Состояние создается с помощью remember и mutableStateOf. remember сохраняет значения между рекомпозициями.
Материал дизайн и темы
Используйте готовые компоненты Material, настраивайте светлую/темную тему и управляйте ресурсами.
Поддержка Material Design 3 в Compose включает компоненты: Card, Button, Scaffold, BottomNavigation. Темы позволяют переключать цвета через MaterialTheme.colors в зависимости от настроек устройства.
Делегаты для управления состоянием
Упростите работу с состоянием в Jetpack Compose с помощью делегатов и remember.
Делегаты Kotlin упрощают работу с MutableState. Вместо `count.value` пишем `count`. Компилятор сам заменяет чтение на getValue, а запись на setValue, вызывая рекомпозицию.
LazyColumn для больших списков
Эффективно отображайте списки с помощью LazyColumn, LazyRow и LazyVerticalGrid.
LazyColumn — аналог RecyclerView. Он отображает только видимые элементы. Функции item и items добавляют элементы. Для сетки используйте LazyVerticalGrid. Всегда указывайте key для стабильности.
Навигация в Compose
Реализуйте переходы между экранами с помощью Jetpack Navigation Compose.
NavHost задает граф навигации, NavController управляет переходами. launchSingleTop предотвращает дублирование экранов. popUpTo очищает стек. saveState и restoreState сохраняют состояние экрана.
Передача параметров в навигации
Передавайте данные между экранами с помощью аргументов маршрута.
Параметры передаются через route после '/'. В NavHost укажите шаблон с {}. По умолчанию аргументы — строки. Для чисел укажите NavType.IntType.
UDF и состояние экрана
Организуйте поток данных с помощью паттерна UDF (Unidirectional Data Flow).
UDF — однонаправленный поток. Состояние экрана хранится в одном объекте (sealed class). ViewModel обновляет состояние, а Composable подписывается на него. События идут обратно в ViewModel.
Какое ключевое отличие Jetpack Compose от традиционной системы View?
Использование декларативного подхода вместо императивного.
В Compose вы описываете, как UI должен выглядеть для данного состояния. Фреймворк сам обновляет интерфейс при изменении данных, в отличие от императивного подхода View.
Отказ от использования языка Kotlin.
Использование Java вместо Kotlin.
Для чего используется аннотация @Preview в Android Studio?
Для визуального предпросмотра Composable-функции без запуска приложения.
@Preview позволяет быстро увидеть, как выглядит интерфейс, прямо в редакторе. Это ускоряет разработку, избавляя от необходимости компилировать всё приложение для каждой правки UI.
Для автоматической генерации кода Activity.
Для добавления анимации.
Какой элемент использовать для расположения аватара и имени в одну строку?
Row
Row предназначен для горизонтального расположения дочерних элементов. Он идеален для создания строки, где аватар и текст находятся рядом.
Column
Box
В каком порядке применяются атрибуты в цепочке Modifier?
В порядке их написания в коде.
Порядок важен. Modifier.size(100.dp).background(Color.Red) сначала задаст размер, а потом покрасит. Если поменять местами, фон будет нарисован на всю большую область.
В алфавитном порядке.
В случайном порядке.
Что такое рекомпозиция в Jetpack Compose?
Повторный вызов функций для обновления UI при изменении состояния.
Когда состояние меняется, Compose перезапускает функции, которые его читают. Это называется рекомпозицией и лежит в основе обновления интерфейса.
Полная перерисовка всего экрана.
Процесс компиляции.
Как сохранить состояние между рекомпозициями?
Использовать remember.
remember сохраняет значение в памяти при рекомпозиции. Это позволяет не сбрасывать UI-состояние, например счетчик, при перерисовке экрана.
Использовать restore.
Использовать cacheState.
Какой компонент предоставляет структуру экрана с местами для TopBar и BottomBar?