Поведение пользовательского интерфейса по умолчанию на разных платформах
Compose Multiplatform помогает создавать приложения, которые ведут себя максимально одинаково на разных платформах. На этой странице вы узнаете о неизбежных различиях и временных компромиссах, которые следует учитывать при написании общего кода пользовательского интерфейса для разных платформ с помощью Compose Multiplatform.
Структура проекта
Для каждой целевой платформы требуется отдельная точка входа:
Для Android это
Activity, задача которого — отображать главный компонуемый элемент из общего кода.Для приложения iOS это класс или структура
@main, которая инициализирует приложение.Для приложения JVM это функция
main(), которая запускает приложение и отображает главный компонуемый элемент из общего кода.Для приложения Kotlin/JS или Kotlin/Wasm это функция
main(), которая добавляет главный компонуемый элемент из общего кода на веб-страницу.
Некоторые необходимые приложению платформенные API могут не поддерживать мультиплатформенную разработку, поэтому для вызова этих API потребуется написать код в платформенных наборах исходного кода. Перед этим ознакомьтесь с сайтом klibs.io — проектом JetBrains, цель которого — составить полный каталог всех доступных библиотек Kotlin Multiplatform. Уже доступны библиотеки для работы с сетью и базами данных, сопрограмм и многого другого.
Способы ввода
Программные клавиатуры
Поведение программных клавиатур может немного различаться на разных платформах, в том числе то, как клавиатура появляется при активации текстового поля.
Compose Multiplatform использует подход Compose к оконным отступам и воспроизводит его в iOS с учётом безопасных областей. В зависимости от реализации программная клавиатура в iOS может располагаться немного иначе. Убедитесь, что на обеих платформах клавиатура не перекрывает важные элементы пользовательского интерфейса.
Поддержка сенсорного ввода и мыши
Текущая реализация для настольных компьютеров интерпретирует любые манипуляции с указателем как действия мышью и поэтому не поддерживает мультитач-жесты. Например, реализовать в Compose Multiplatform для настольных компьютеров распространённый жест масштабирования щипком нельзя, поскольку для этого нужно одновременно обрабатывать два касания.
Поведение и внешний вид пользовательского интерфейса
Функциональность, зависящая от платформы
Некоторые распространённые элементы пользовательского интерфейса не входят в Compose Multiplatform и не могут быть настроены с помощью этого фреймворка. Поэтому следует учитывать, что на разных платформах они будут выглядеть по-разному.
Примером служат встроенные всплывающие окна: при выделении текста в текстовом поле Compose Multiplatform стандартные предлагаемые действия, такие как Копировать или Перевести, зависят от платформы, на которой запущено приложение.
Физика прокрутки
На Android и iOS прокрутка ощущается так, как принято на соответствующей платформе. На настольных компьютерах поддерживается только прокрутка колёсиком мыши (как упоминалось в разделе Поддержка сенсорного ввода и мыши).
Взаимодействие с нативными представлениями
Если вы хотите встраивать нативные представления в общие компонуемые элементы или наоборот, ознакомьтесь с платформенными механизмами, поддерживаемыми Compose Multiplatform.
Для iOS есть отдельные руководства по взаимодействию с SwiftUI и UIKit.
Для настольных компьютеров Compose Multiplatform поддерживает взаимодействие со Swing.
Жест возврата
На устройствах Android по умолчанию поддерживается жест возврата, и каждый экран так или иначе реагирует на кнопку Назад.
В iOS жест возврата по умолчанию отсутствует, однако разработчикам рекомендуется реализовать аналогичную функциональность, чтобы оправдать ожидания пользователей. В Compose Multiplatform для iOS жесты возврата поддерживаются по умолчанию, чтобы воспроизвести поведение Android.
На настольных компьютерах Compose Multiplatform использует клавишу Esc для возврата по умолчанию.
Подробнее см. в разделе Жест возврата.
Текст
Compose Multiplatform не гарантирует пиксельного соответствия текста на разных платформах:
Если вы явно не зададите шрифт, каждая система назначит тексту свой шрифт по умолчанию.
Даже при использовании одного и того же шрифта заметные различия могут возникать из-за особенностей сглаживания символов на каждой платформе.
Это не оказывает существенного влияния на удобство работы пользователей. Напротив, шрифты по умолчанию выглядят на каждой платформе ожидаемым образом. Однако различия на уровне пикселей могут, например, мешать тестированию снимков экрана.
Удобство разработки
Предварительный просмотр
Предварительный просмотр — это представление макета компонуемых элементов с аннотацией @Preview. Его можно отображать рядом с общим кодом пользовательского интерфейса в IntelliJ IDEA и Android Studio.
Для предварительного просмотра требуется особая конфигурация проекта с явно указанными зависимостями. О том, как включить предварительный просмотр в проекте, читайте в разделе Предварительный просмотр пользовательского интерфейса Compose.
Горячая перезагрузка
Горячая перезагрузка — это применение изменений кода в приложении на лету без дополнительных действий со стороны пользователя. В Compose Multiplatform горячая перезагрузка доступна только для целевых платформ JVM (настольных компьютеров). Однако её можно использовать для быстрого поиска и устранения проблем, прежде чем переключиться на целевые платформы и выполнить тонкую настройку.
Подробнее см. в статье Горячая перезагрузка Compose.
Что дальше
Подробнее о реализации Compose Multiplatform для следующих компонентов:
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-platform-specifics.html