Глава 1. Начало……………………………………………………………………………………… 22
1.1. Для Kotlin-программистов………………………………………………………………………………………………….. 23
1.2. Для новых Kotlin-программистов………………………………………………………………………………………. 23
1.3. Загрузка примеров кода……………………………………………………………………………………………………… 23
Глава 2. Настройка среды разработки Android Studio…………………………….. 24
2.1. Системные требования……………………………………………………………………………………………………….. 24
2.2. Загрузка пакета Android Studio………………………………………………………………………………………….. 24
2.3. Установка Android Studio…………………………………………………………………………………………………… 25
2.3.1. Установка в Windows……………………………………………………………………………………………….. 25
2.3.2. Установка в macOS………………………………………………………………………………………………….. 25
2.3.3. Установка в Linux…………………………………………………………………………………………………….. 26
2.4. Мастер установки Android Studio……………………………………………………………………………………… 26
2.5. Установка дополнительных пакетов Android SDK………………………………………………………….. 29
2.6. Установка инструментов командной строки Android SDK……………………………………………… 32
2.6.1. Windows 8.1……………………………………………………………………………………………………………….. 33
2.6.2. Windows 10………………………………………………………………………………………………………………… 34
2.6.3. Windows 11………………………………………………………………………………………………………………… 34
2.6.4. Linux………………………………………………………………………………………………………………………….. 34
2.6.5. macOS………………………………………………………………………………………………………………………… 34
2.7. Управлению памятью Android Studio………………………………………………………………………………… 35
2.8. Обновление Android Studio и SDK……………………………………………………………………………………… 36
2.9. Заключение………………………………………………………………………………………………………………………….. 36
Глава 3. Обзор Compose-проекта……………………………………………………………. 37
3.1. О проекте……………………………………………………………………………………………………………………………… 37
3.2. Создание проекта……………………………………………………………………………………………………………….. 37
3.3. Создание активити……………………………………………………………………………………………………………… 39
3.4. Определение параметров проекта и настроек для SDK………………………………………………….. 39
3.5. Включение нового UI-интерфейса в проект Android Studio…………………………………………….. 41
3.6. Предварительный просмотр тестового проекта………………………………………………………………. 42
3.7. Обзор главной активити……………………………………………………………………………………………………… 46
3.8. Предварительный просмотр обновлений…………………………………………………………………………. 50
3.9. Список материалов и версия Compose……………………………………………………………………………… 51
3.10. Заключение……………………………………………………………………………………………………………………….. 52
Глава 4. Пример Compose-проекта…………………………………………………………. 53
4.1. Начало работы……………………………………………………………………………………………………………………. 53
4.2. Удаление кода шаблона…………………………………………………………………………………………………….. 53
4.3. Иерархия компонуемых функций………………………………………………………………………………………. 54
4.4. Добавление компонуемой функции DemoText…………………………………………………………………. 54
4.5. Предварительный просмотр компонуемой функции DemoText……………………………………… 56
4.6. Добавление компонуемой функции DemoSlider……………………………………………………………….. 57
4.7. Добавление компонуемой функции DemoScreen……………………………………………………………… 58
4.8. Предварительный просмотр компонуемой функции DemoScreen………………………………….. 60
4.9. Настройка параметров предварительного просмотра……………………………………………………. 61
4.10. Тестирование в интерактивном режиме………………………………………………………………………….. 62
4.11. Завершение проекта…………………………………………………………………………………………………………. 62
4.12. Заключение……………………………………………………………………………………………………………………….. 63
Глава 5. Создание виртуального Android-устройства в Android Studio……. 64
5.1. О виртуальных устройствах Android………………………………………………………………………………… 64
5.2. Запуск эмулятора……………………………………………………………………………………………………………….. 66
5.3. Запуск приложения в AVD…………………………………………………………………………………………………. 68
5.4. Обновления в реальном времени с помощью Live Edit……………………………………………………. 69
5.5. Запуск на нескольких устройствах…………………………………………………………………………………… 71
5.6. Остановка работающего приложения………………………………………………………………………………. 72
5.7. Поддержка темной темы…………………………………………………………………………………………………….. 73
5.8. Запуск эмулятора в отдельном окне…………………………………………………………………………………. 74
5.9. Отключение рамки устройства………………………………………………………………………………………….. 76
5.10. Заключение……………………………………………………………………………………………………………………….. 78
Глава 6. Использование и настройка эмулятора для AVD в Android Studio 79
6.1. Среда эмулятора…………………………………………………………………………………………………………………. 79
6.2. Панель инструментов эмулятора………………………………………………………………………………………. 80
6.3. Работа в режиме масштабирования………………………………………………………………………………….. 81
6.4. Изменение размера окна эмулятора………………………………………………………………………………….. 82
6.5. Расширенные возможности управления…………………………………………………………………………… 82
6.5.1. Location (местоположение)……………………………………………………………………………………… 83
6.5.2. Displays (дисплеи)…………………………………………………………………………………………………….. 83
6.5.3. Cellular (сотовая связь)……………………………………………………………………………………………… 83
6.5.4. Battery (аккумулятор)………………………………………………………………………………………………. 83
6.5.5. Camera (камера)……………………………………………………………………………………………………….. 83
6.5.6. Phone (телефон)………………………………………………………………………………………………………… 83
6.5.7. Directional Pad (навигационная панель)…………………………………………………………………. 84
6.5.8. Microphone (микрофон)……………………………………………………………………………………………. 84
6.5.9. Fingerprint (отпечаток пальца)…………………………………………………………………………………. 84
6.5.10. Virtual Sensors (виртуальные датчики)…………………………………………………………………. 84
6.5.11. Snapshots (снимки)………………………………………………………………………………………………….. 84
6.5.12. Record and Playback (запись и воспроизведение)………………………………………………… 84
6.5.13. Google Play………………………………………………………………………………………………………………. 84
6.5.14. Settings (настройки)………………………………………………………………………………………………… 85
6.5.15. Help (помощь)…………………………………………………………………………………………………………. 85
6.6. Работа со снимками……………………………………………………………………………………………………………. 85
6.7. Настройка эмуляции отпечатков пальцев………………………………………………………………………… 85
6.8. Эмулятор в режиме окна инструментов……………………………………………………………………………. 88
6.9. Создание эмулятора с изменяемым размером………………………………………………………………….. 88
6.10. Заключение……………………………………………………………………………………………………………………….. 89
Глава 7. Обзор пользовательского интерфейса Android Studio……………….. 90
7.1. Экран приветствия………………………………………………………………………………………………………………. 90
7.2. Строка меню………………………………………………………………………………………………………………………… 91
7.3. Главное окно……………………………………………………………………………………………………………………….. 92
7.4. Окна инструментов……………………………………………………………………………………………………………… 94
7.5. Меню окон инструментов…………………………………………………………………………………………………… 97
7.6. Сочетания клавиш………………………………………………………………………………………………………………. 98
7.7. Навигация по Switcher и Recent Files…………………………………………………………………………………. 98
7.8. Изменение темы Android Studio……………………………………………………………………………………….. 100
7.9. Заключение……………………………………………………………………………………………………………………….. 101
Глава 8. Тестирование приложений на физическом Android-устройстве. 102
8.1. Обзор Android Debug Bridge (ADB)………………………………………………………………………………….. 102
8.2. Включение отладки ADB по USB на устройствах Android…………………………………………… 102
8.2.1. Конфигурация ADB на macOS………………………………………………………………………………. 104
8.2.2. Конфигурация ADB на Windows…………………………………………………………………………… 104
8.2.3. Конфигурация ADB на Linux………………………………………………………………………………… 105
8.3. Устранение проблем с USB-подключением……………………………………………………………………. 106
8.4. Включение беспроводной отладки на устройствах Android………………………………………… 106
8.5. Тестирование соединения adb…………………………………………………………………………………………. 109
8.6. Зеркалирование устройств………………………………………………………………………………………………. 110
8.7. Заключение……………………………………………………………………………………………………………………….. 110
Глава 9. Основы редактора кода Android Studio…………………………………… 111
9.1. Редактор кода Android Studio…………………………………………………………………………………………… 111
9.2. Разделение окна редактора……………………………………………………………………………………………… 114
9.3. Автозавершение кода……………………………………………………………………………………………………….. 115
9.4. Автозавершение операторов……………………………………………………………………………………………. 117
9.5. Информация о параметрах………………………………………………………………………………………………. 117
9.6. Подсказки имен параметров…………………………………………………………………………………………….. 118
9.7. Генерация кода…………………………………………………………………………………………………………………. 118
9.8. Сокрытие кода…………………………………………………………………………………………………………………… 119
9.9. Быстрый поиск документации…………………………………………………………………………………………. 121
9.10. Переформатирование кода…………………………………………………………………………………………….. 121
9.11. Поиск примера кода……………………………………………………………………………………………………….. 123
9.12. Живые шаблоны……………………………………………………………………………………………………………… 123
9.13. Заключение……………………………………………………………………………………………………………………… 124
Глава 10. Обзор архитектуры Android………………………………………………….. 125
10.1. Программный стек Android…………………………………………………………………………………………….. 125
10.2. Ядро Linux……………………………………………………………………………………………………………………….. 126
10.3. Слой аппаратной абстракции……………………………………………………………………………………….. 126
10.4. Android Runtime — ART…………………………………………………………………………………………………. 126
10.5. Библиотеки Android………………………………………………………………………………………………………… 127
10.5.1. Библиотеки C/C++………………………………………………………………………………………………. 128
10.6. Фреймворк приложений…………………………………………………………………………………………………. 128
10.7. Приложения…………………………………………………………………………………………………………………….. 129
10.8. Заключение……………………………………………………………………………………………………………………… 129
Глава 11. Введение в Kotlin………………………………………………………………….. 130
11.1. Что такое Kotlin?……………………………………………………………………………………………………………… 130
11.2. Kotlin и Java…………………………………………………………………………………………………………………….. 130
11.3. Преобразование из Java в Kotlin……………………………………………………………………………………. 131
11.4. Kotlin и Android Studio…………………………………………………………………………………………………….. 131
11.5. Эксперименты с Kotlin……………………………………………………………………………………………………. 131
11.6. Точки с запятой в Kotlin………………………………………………………………………………………………….. 132
11.7. Заключение……………………………………………………………………………………………………………………… 133
Глава 12. Типы данных и переменные в Kotlin…………………………………….. 134
12.1. Типы данных Kotlin………………………………………………………………………………………………………… 134
12.1.1. Целочисленные типы данных……………………………………………………………………………. 135
12.1.2. Типы данных с плавающей точкой…………………………………………………………………… 135
12.1.3. Тип данных Boolean…………………………………………………………………………………………… 135
12.1.4. Символьный тип данных……………………………………………………………………………………. 136
12.1.5. Тип данных String……………………………………………………………………………………………….. 136
12.1.6. Экранированные последовательности…………………………………………………………….. 137
12.2. Изменяемые переменные………………………………………………………………………………………………… 137
12.3. Неизменяемые переменные……………………………………………………………………………………………. 138
12.4. Объявление изменяемых и неизменяемых переменных……………………………………………….. 138
12.5. Типы данных являются объектами……………………………………………………………………………….. 139
12.6. Аннотации типов и вывод типов……………………………………………………………………………………. 139
12.7. Nullable-типы…………………………………………………………………………………………………………………… 140
12.8. Оператор безопасного вызова……………………………………………………………………………………….. 141
12.9. Ненулевые утверждения………………………………………………………………………………………………… 142
12.10. Nullable-типы и функция let………………………………………………………………………………………….. 142
12.11. Поздняя инициализация (lateinit)…………………………………………………………………………………. 144
12.12. Оператор Элвиса………………………………………………………………………………………………………….. 144
12.13. Приведение типов и проверка типов…………………………………………………………………………… 145
12.14. Заключение……………………………………………………………………………………………………………………. 145
Глава 13. Операторы и выражения в Kotlin………………………………………….. 146
13.1. Синтаксис выражений в Kotlin………………………………………………………………………………………. 146
13.2. Базовый оператор присваивания………………………………………………………………………………….. 146
13.3. Арифметические операторы в Kotlin…………………………………………………………………………….. 147
13.4. Расширенные операторы присваивания………………………………………………………………………. 147
13.5. Операторы инкремента и декремента…………………………………………………………………………… 148
13.6. Операторы равенства…………………………………………………………………………………………………….. 148
13.7. Булевы логические операторы………………………………………………………………………………………. 149
13.8. Оператор диапазона………………………………………………………………………………………………………. 150
13.9. Поразрядные операторы………………………………………………………………………………………………… 150
13.9.1. Поразрядная инверсия……………………………………………………………………………………….. 151
13.9.2. Поразрядное «И»………………………………………………………………………………………………… 151
13.9.3. Поразрядное «ИЛИ»…………………………………………………………………………………………… 151
13.9.4. Побитовое исключающее «ИЛИ»……………………………………………………………………… 152
13.9.5. Поразрядный сдвиг влево………………………………………………………………………………….. 152
13.9.6. Поразрядный сдвиг вправо………………………………………………………………………………… 153
13.10. Заключение……………………………………………………………………………………………………………………. 153
Глава 14. Управление потоком в Kotlin………………………………………………… 154
14.1. Циклический поток управления…………………………………………………………………………………….. 154
14.1.1. Оператор for-in в Kotlin………………………………………………………………………………………. 154
14.1.2. Цикл while……………………………………………………………………………………………………………. 156
14.1.3. Цикл do… while…………………………………………………………………………………………………….. 156
14.1.4. Выход из циклов…………………………………………………………………………………………………. 157
14.1.5. Оператор continue………………………………………………………………………………………………. 157
14.1.6. Метки break и continue……………………………………………………………………………………….. 158
14.2. Условный поток управления………………………………………………………………………………………….. 159
14.2.1. Выражения if………………………………………………………………………………………………………. 159
14.2.2. Выражения if… else……………………………………………………………………………………………… 160
14.2.3. Выражения if… else if………………………………………………………………………………………….. 160
14.2.4. Оператор when……………………………………………………………………………………………………. 161
14.3. Заключение……………………………………………………………………………………………………………………… 161
Глава 15. Обзор функций и лямбда-выражений в Kotlin………………………. 162
15.1. Что такое функция?…………………………………………………………………………………………………………. 162
15.2. Как объявить функцию Kotlin………………………………………………………………………………………… 162
15.3. Вызов функции Kotlin……………………………………………………………………………………………………… 163
15.4. Функции с одним выражением………………………………………………………………………………………. 163
15.5. Локальные функции………………………………………………………………………………………………………… 164
15.6. Обработка возвращаемых значений…………………………………………………………………………….. 164
15.7. Объявление параметров функции по умолчанию………………………………………………………… 164
15.8. Переменное число параметров функции………………………………………………………………………. 165
15.9. Лямбда-выражения…………………………………………………………………………………………………………. 166
15.10. Функции высшего порядка…………………………………………………………………………………………… 167
15.11. Заключение……………………………………………………………………………………………………………………. 168
Глава 16. Основы объектно-ориентированного программирования
в Kotlin…………………………………………………………………………………………………. 169
16.1. Что такое объект?……………………………………………………………………………………………………………. 169
16.2. Что такое класс?……………………………………………………………………………………………………………… 169
16.3. Объявление класса в Kotlin…………………………………………………………………………………………….. 169
16.4. Добавление свойств в класс…………………………………………………………………………………………… 170
16.5. Определение методов……………………………………………………………………………………………………… 170
16.6. Объявление и инициализация экземпляра класса……………………………………………………….. 171
16.7. Главные и вторичные конструкторы…………………………………………………………………………….. 171
16.8. Блоки инициализаторов…………………………………………………………………………………………………. 173
16.9. Вызов методов и доступ к свойствам……………………………………………………………………………. 174
16.10. Пользовательские аксессоры………………………………………………………………………………………. 174
16.11. Вложенные и внутренние классы………………………………………………………………………………… 175
16.12. Объекты-компаньоны…………………………………………………………………………………………………… 176
16.13. Заключение……………………………………………………………………………………………………………………. 178
Глава 17. Введение в наследование и подклассы в Kotlin…………………….. 179
17.1. Наследование, классы и подклассы……………………………………………………………………………… 179
17.2. Синтаксис подклассов……………………………………………………………………………………………………. 179
17.3. Пример наследования в Kotlin……………………………………………………………………………………….. 181
17.4. Расширение функционала подкласса…………………………………………………………………………… 182
17.5. Переопределение унаследованных методов………………………………………………………………… 182
17.6. Добавление пользовательского вторичного конструктора………………………………………… 184
17.7. Использование класса SavingsAccount…………………………………………………………………………. 184
17.8. Заключение……………………………………………………………………………………………………………………… 185
Глава 18. Обзор Compose……………………………………………………………………… 186
18.1. Разработка до Compose…………………………………………………………………………………………………. 186
18.2. Декларативный синтаксис Compose…………………………………………………………………………….. 187
18.3. Compose, управляемый данными………………………………………………………………………………….. 187
18.4. Заключение……………………………………………………………………………………………………………………… 188
Глава 19. Руководство по каталогам версий Gradle……………………………… 189
19.1. Зависимости библиотек и плагинов………………………………………………………………………………. 189
19.2. Файл сборки пакета в Gradle………………………………………………………………………………………….. 189
19.3. Файлы сборки модуля в Gradle………………………………………………………………………………………. 190
19.4. Файл version catalog………………………………………………………………………………………………………… 190
19.5. Добавление зависимостей……………………………………………………………………………………………… 192
19.6. Обновления библиотек…………………………………………………………………………………………………… 193
19.7. Заключение……………………………………………………………………………………………………………………… 193
Глава 20. Обзор компонуемых функций………………………………………………. 194
20.1. Что такое компонуемая функция?…………………………………………………………………………………. 194
20.2. Компонуемые функции с сохранением и без сохранения состояния…………………………. 194
20.3. Синтаксис компонуемой функции…………………………………………………………………………………. 195
20.4. Компонуемые функции Foundation и Material……………………………………………………………… 197
20.5. Заключение……………………………………………………………………………………………………………………… 199
Глава 21. Обзор состояния и рекомпозиции в Compose………………………… 200
21.1. Основы состояния…………………………………………………………………………………………………………… 200
21.2. Знакомство с рекомпозицией…………………………………………………………………………………………. 200
21.3. Создание проекта StateExample……………………………………………………………………………………. 201
21.4. Объявление состояния в компонуемой функции………………………………………………………….. 201
21.5. Однонаправленный поток данных………………………………………………………………………………… 205
21.6. Подъем состояния…………………………………………………………………………………………………………… 207
21.7. Сохранение состояния через изменения конфигурации……………………………………………… 210
21.8. Заключение……………………………………………………………………………………………………………………… 211
Глава 22. Введение в Composition Local………………………………………………… 213
22.1. Понимание CompositionLocal………………………………………………………………………………………… 213
22.2. Использование CompositionLocal………………………………………………………………………………….. 215
22.3. Создание проекта CompLocalDemo……………………………………………………………………………… 215
22.4. Разработка макета………………………………………………………………………………………………………….. 216
22.5. Добавление состояния CompositionLocal…………………………………………………………………….. 217
22.6. Доступ к состоянию CompositionLocal…………………………………………………………………………. 218
22.7. Тестирование дизайна……………………………………………………………………………………………………. 218
22.8. Заключение……………………………………………………………………………………………………………………… 220
Глава 23. Обзор API-слотов в Compose…………………………………………………. 221
23.1. Понимание API-слотов…………………………………………………………………………………………………… 221
23.2. Объявление API-слота……………………………………………………………………………………………………. 222
23.3. Вызов компонуемых API-слотов……………………………………………………………………………………. 223
23.4. Заключение……………………………………………………………………………………………………………………… 224
Глава 24. Пособие по API-слотам в Compose………………………………………… 225
24.1. О проекте…………………………………………………………………………………………………………………………. 225
24.2. Создание проекта SlotApiDemo…………………………………………………………………………………….. 225
24.3. Подготовка файла для класса MainActivity…………………………………………………………………. 225
24.4. Создание компонуемой функции MainScreen………………………………………………………………. 226
24.5. Добавление компонуемой функции ScreenContent………………………………………………………. 227
24.6. Создание компонуемой функции Checkbox…………………………………………………………………. 228
24.7. Реализация API-слотов в ScreenContent……………………………………………………………………….. 229
24.8. Добавление ресурса рисования изображения……………………………………………………………… 231
24.9. Кодирование компонуемой функции TitleImage………………………………………………………….. 233
24.10. Заполнение компонуемой функции MainScreen…………………………………………………………. 233
24.11. Предварительный просмотр проекта………………………………………………………………………….. 235
24.12. Заключение……………………………………………………………………………………………………………………. 237
Глава 25. Использование модификаторов в Compose……………………………. 238
25.1. Обзор модификаторов…………………………………………………………………………………………………….. 238
25.2. Создание проекта ModifierDemo…………………………………………………………………………………… 239
25.3. Создание модификатора………………………………………………………………………………………………… 240
25.4. Порядок модификаторов………………………………………………………………………………………………… 241
25.5. Добавление поддержки модификаторов в компонуемую функцию…………………………… 242
25.6. Общие встроенные модификаторы……………………………………………………………………………….. 246
25.7. Объединение модификаторов………………………………………………………………………………………… 246
25.8. Заключение……………………………………………………………………………………………………………………… 247
Глава 26. Аннотированные строки и стили инструмента Brush……………. 248
26.1. Что такое аннотированные строки?……………………………………………………………………………… 248
26.2. Использование аннотированных строк………………………………………………………………………… 248
26.3. Стилизация текста с помощью инструмента Brush……………………………………………………… 249
26.4. Создание проекта для демонстрации……………………………………………………………………………. 250
26.5. Пример аннотированной строки SpanStyle………………………………………………………………….. 250
26.6. Пример аннотированной строки ParagraphStyle………………………………………………………….. 252
26.7. Пример стиля Brush………………………………………………………………………………………………………… 254
26.8. Заключение……………………………………………………………………………………………………………………… 256
Глава 27. Создание макетов с помощью компонуемых функций Row и Column 257
27.1. Создание проекта RowColDemo……………………………………………………………………………………. 257
27.2. Компонуемая функция Row……………………………………………………………………………………………. 258
27.3. Компонуемая функция Column……………………………………………………………………………………… 259
27.4. Объединение компонуемых функций Row и Column…………………………………………………… 259
27.5. Выравнивание макета…………………………………………………………………………………………………….. 260
27.6. Позиционирование макета…………………………………………………………………………………………….. 263
27.7. Интервал между расположениями макета……………………………………………………………………. 265
27.8. Модификаторы области действия для компонентов Row и Column………………………….. 266
27.9. Веса модификаторов области действия……………………………………………………………………….. 270
27.10. Заключение……………………………………………………………………………………………………………………. 271
Глава 28. Макеты компонента Box в Compose……………………………………… 272
28.1. Введение в компонуемую функцию Box……………………………………………………………………….. 272
28.2. Создание проекта BoxLayout………………………………………………………………………………………… 272
28.3. Добавление компонуемой функции TextCell………………………………………………………………… 273
28.4. Добавление макета Box…………………………………………………………………………………………………. 273
28.5. Выравнивание в Box………………………………………………………………………………………………………. 274
28.6. Модификаторы области действия BoxScope……………………………………………………………….. 276
28.7. Использование модификатора clip………………………………………………………………………………… 277
28.8. Заключение……………………………………………………………………………………………………………………… 278
Глава 29. Введение в FlowRow и FlowColumn……………………………………….. 279
29.1. Компонуемые функции FlowColumn и FlowRow………………………………………………………….. 279
29.2. Максимальное количество элементов………………………………………………………………………….. 280
29.3. Работа с расположением главной оси………………………………………………………………………….. 281
29.4. Понимание поперечного расположения по осям…………………………………………………………. 282
29.5. Выравнивание элементов………………………………………………………………………………………………. 282
29.6. Управление размером элемента……………………………………………………………………………………. 283
29.7. Заключение……………………………………………………………………………………………………………………… 284
Глава 30. Руководство по FlowRow и FlowColumn………………………………… 285
30.1. Создание проекта FlowLayoutDemo……………………………………………………………………………… 285
30.2. Генерация случайных значений для высоты и цвета………………………………………………….. 286
30.3. Добавление компонуемой функции Box……………………………………………………………………….. 287
30.4. Изменение расположения макета Flow…………………………………………………………………………. 288
30.5. Изменение выравнивания элементов…………………………………………………………………………….. 289
30.6. Переключение на FlowColumn………………………………………………………………………………………. 290
30.7. Использование перекрестного расположения……………………………………………………………… 291
30.8. Добавление весов для элементов…………………………………………………………………………………… 292
30.9. Заключение……………………………………………………………………………………………………………………… 293
Глава 31. Пользовательские модификаторы макета…………………………….. 294
31.1. Основы компоновки макета в Compose………………………………………………………………………… 294
31.2. Пользовательские макеты………………………………………………………………………………………………. 295
31.3. Создание проекта LayoutModifier…………………………………………………………………………………. 295
31.4. Добавление компонуемой функции ColorBox………………………………………………………………. 295
31.5. Создание пользовательского модификатора макета…………………………………………………… 296
31.6. Понимание позиции по умолчанию………………………………………………………………………………. 297
31.7. Завершение модификатора макета……………………………………………………………………………….. 297
31.8. Использование пользовательского модификатора……………………………………………………… 299
31.9. Работа с линиями выравнивания…………………………………………………………………………………… 299
31.10. Работа с базовыми линиями………………………………………………………………………………………… 302
31.11. Заключение……………………………………………………………………………………………………………………. 303
Глава 32. Создание пользовательских макетов…………………………………….. 304
32.1. Обзор пользовательских макетов………………………………………………………………………………….. 304
32.2. Синтаксис пользовательского макета…………………………………………………………………………… 304
32.3. Использование пользовательского макета…………………………………………………………………… 306
32.4. Создание проекта CustomLayout………………………………………………………………………………….. 306
32.5. Создание компонуемой функции CascadeLayout………………………………………………………… 307
32.6. Использование компонуемой функции CascadeLayout………………………………………………. 309
32.7. Заключение……………………………………………………………………………………………………………………… 310
Глава 33. Руководство по ConstraintLayout в Compose…………………………. 311
33.1. Введение в ConstraintLayout………………………………………………………………………………………….. 311
33.2. Как работает ConstraintLayout……………………………………………………………………………………… 311
33.2.1. Ограничения……………………………………………………………………………………………………….. 312
33.2.2. Поля……………………………………………………………………………………………………………………… 312
33.2.3. Противоположные ограничения……………………………………………………………………….. 313
33.2.4. Смещение ограничений……………………………………………………………………………………… 313
33.2.5. Цепочки……………………………………………………………………………………………………………….. 314
33.2.6. Стили цепочки…………………………………………………………………………………………………….. 315
33.3. Настройка размеров……………………………………………………………………………………………………….. 316
33.4. Направляющие линии…………………………………………………………………………………………………….. 317
33.5. Барьеры……………………………………………………………………………………………………………………………. 317
33.6. Заключение……………………………………………………………………………………………………………………… 319
Глава 34. Работа с ConstraintLayout в Compose…………………………………….. 320
34.1. Вызов ConstraintLayout………………………………………………………………………………………………….. 320
34.2. Генерация ссылок…………………………………………………………………………………………………………… 320
34.3. Назначение ссылки на компонуемую функцию…………………………………………………………… 321
34.4. Добавление ограничений……………………………………………………………………………………………….. 321
34.5. Создание проекта ConstraintLayout……………………………………………………………………………… 322
34.6. Добавление библиотеки ConstraintLayout……………………………………………………………………. 322
34.7. Добавление пользовательской компонуемой функции button……………………………………. 323
34.8. Базовые ограничения……………………………………………………………………………………………………… 324
34.9. Противоположные ограничения……………………………………………………………………………………. 325
34.10. Смещение ограничений………………………………………………………………………………………………… 327
34.11. Ограничения полями…………………………………………………………………………………………………….. 327
34.12. Важность противоположных ограничений и смещений…………………………………………… 329
34.13. Создание цепочек…………………………………………………………………………………………………………. 332
34.14. Работа с направляющими линиями…………………………………………………………………………….. 333
34.15. Работа с барьерами………………………………………………………………………………………………………. 334
34.16. Наборы ограничений……………………………………………………………………………………………………. 338
34.17. Заключение……………………………………………………………………………………………………………………. 340
Глава 35. Работа с IntrinsicSize в Compose…………………………………………….. 341
35.1. Внутренние измерения……………………………………………………………………………………………………. 341
35.2. Измерение максимального и минимального внутреннего размера……………………………. 342
35.3. О проекте…………………………………………………………………………………………………………………………. 343
35.4. Создание проекта IntrinsicSizeDemo……………………………………………………………………………… 343
35.5. Создание пользовательского текстового поля…………………………………………………………….. 344
35.6. Добавление компонентов Text и Box……………………………………………………………………………. 344
35.7. Добавление столбца верхнего уровня………………………………………………………………………….. 345
35.8. Тестирование проекта……………………………………………………………………………………………………. 346
35.9. Применение измерений IntrinsicSize.Max……………………………………………………………………… 346
35.10. Применение измерений IntrinsicSize.Min…………………………………………………………………….. 347
35.11. Заключение……………………………………………………………………………………………………………………. 347