UI/UX и компоненты в мобильной разработке: что это, какие бывают и как использовать

Автор: IT Sectr Опубликовано: 2026-02-23 Время чтения: 11 мин

Разработка интерфейса мобильного приложения начинается с понимания UI-компонентов и фреймворков. В этой статье разберём Material Design, Human Interface Guidelines, SwiftUI, Jetpack Compose, Flutter Widgets, систему единиц измерения (dp, sp, pt, px) и все ключевые элементы UI — от NavigationView и RecyclerView до Safe Area и Dark Mode. Материал ориентирован на новичков, переходящих от теории к первым проектам. Подробнее — в официальной документации Material Design.

Главное

  • Material Design (Google) и Human Interface Guidelines (Apple) — две основные дизайн-системы для мобильных платформ
  • Декларативные фреймворки SwiftUI и Jetpack Compose заменяют классические UIView и XML-разметку
  • Flutter использует собственную библиотеку Widgets — всё от текста до анимации является виджетом
  • Единицы dp, sp и pt обеспечивают корректное отображение на экранах с разной плотностью (mdpi–xxxhdpi)
  • Accessibility (a11y) и интернационализация (i18n) — обязательные требования для публикации в магазинах приложений

Дизайн-системы: Material Design и Human Interface Guidelines

Каждая платформа предлагает собственный набор правил и компонентов. Для Android это Material Design, разработанный Google в 2014 году. Material Design использует метафору физического материала — слои, тени (Elevation), анимированные переходы и адаптивные макеты. Ключевые принципы включают иерархию через возвышение (Elevation), осмысленное движение и адаптивность под разные форм-факторы. Рекомендуем изучить Material Design 3 (Material You) — последнюю версию с динамической темой и персонализированными цветами.

Apple предлагает Human Interface Guidelines (HIG) — свод правил для iOS, iPadOS, macOS, watchOS и tvOS. HIG делает акцент на чёткой типографике (San Francisco), Safe Area для учёта Notch и Dynamic Island, жестовой навигации и консистентности. В отличие от Material Design, HIG не использует «слои» и Elevation — вместо этого применяются размытие (vibrancy), тени и аккуратные разделители. Полная документация HIG регулярно обновляется с выходом новых версий iOS.

В IT Sectr мы используем обе дизайн-системы в зависимости от платформы заказчика. Для кроссплатформенных проектов на Flutter разрабатываем единую дизайн-систему, сочетающую лучшие практики Material Design и HIG. Такой подход позволяет сохранить нативный UX на каждой платформе без дублирования кода.

Декларативные UI-фреймворки: SwiftUI и Jetpack Compose

Традиционный подход к построению UI — императивная верстка через XML (Android) или Interface Builder / код (iOS). Современная альтернатива — декларативные фреймворки, где разработчик описывает, как интерфейс должен выглядеть при каждом состоянии, а фреймворк заботится об обновлениях.

Jetpack Compose (Android)

Jetpack Compose — современный тулкит от Google для построения нативного UI на Kotlin. Вместо XML-разметки используются Kotlin-функции-компонуемые (@Composable). Compose полностью декларативен: при изменении данных перерисовываются только изменившиеся части экрана. Пример простого экрана с текстом и кнопкой:

kotlin
@Composable
fun GreetingScreen() {
    var count = remember { mutableStateOf(0) }
    Column {
        Text(text = "Нажато: $count")
        Button(onClick = { count++ }) {
            Text("Нажми меня")
        }
    }
}

SwiftUI (iOS)

SwiftUI — декларативный фреймворк Apple, представленный в 2019 году. Работает на всех платформах Apple (iOS, iPadOS, macOS, watchOS, tvOS) через единый API. SwiftUI использует структуры View, свойства @State и @Binding для управления данными, а также модификаторы для настройки внешнего вида. Аналог примера выше на SwiftUI:

swift
struct GreetingView: View {
    @State private var count = 0
    var body: some View {
        VStack {
            Text("Нажато: \(count)")
            Button("Нажми меня") {
                count += 1
            }
        }
    }
}

Flutter Widgets

Flutter от Google использует собственную библиотеку виджетов. Всё в Flutter — виджет: от паддинга до целого экрана. Виджеты делятся на StatelessWidget (неизменяемые) и StatefulWidget (с состоянием). Базовые контейнеры — Container, Row, Column, Stack. Flutter не использует нативные компоненты платформы — он рисует всё через Skia Engine, что обеспечивает одинаковый вид на Android и iOS.

dart
class GreetingWidget extends StatefulWidget {
    @override
    State createState() => _GreetingWidgetState();
}
class _GreetingWidgetState extends State<GreetingWidget> {
    int count = 0;
    @override
    Widget build(BuildContext context) {
        return Column(
            children: [
                Text('Нажато: $count'),
                ElevatedButton(
                    onPressed: () => setState(() => count++),
                    child: Text('Нажми меня'),
                ),
            ],
        );
    }
}

Нативные UI-компоненты Android и iOS

Несмотря на распространение декларативных фреймворков, понимание нативных компонентов остаётся важным для поддержки легаси-проектов и глубокой кастомизации.

Навигация

Навигация в Android строится на Activity (экраны-активности) и Fragment (фрагменты внутри одной Activity). Jetpack Navigation Component упрощает переходы между экранами через граф навигации. В iOS навигация реализуется через NavigationController — стек контроллеров с анимированными переходами. Tab Bar и Bottom Navigation обеспечивают переключение между основными разделами приложения. Drawer (боковое меню) и Toolbar/ActionBar используются для дополнительных действий. Android Navigation Component рекомендуется для всех новых проектов.

Списки

Для отображения больших объёмов данных Android использует RecyclerView — эффективный контейнер с переиспользованием ViewHolder. В iOS аналогом служат UITableView (вертикальные списки) и UICollectionView (сетки). Jetpack Compose предлагает LazyColumn и LazyVerticalGrid, а SwiftUI — List и LazyVStack/LazyHStack. Ключевое преимущество Lazy-компонентов — отрисовка только видимых элементов.

Платформа Компонент списка Компонент сетки Ленивая загрузка
Android (View System)RecyclerView + ListViewRecyclerView GridLayoutManagerДа
Android (Compose)LazyColumnLazyVerticalGridДа
iOS (UIKit)UITableViewUICollectionViewДа
iOS (SwiftUI)List / LazyVStackLazyVGridДа
FlutterListView.builderGridView.builderДа

Макеты и расположение

Android View System предлагает несколько Layout-контейнеров: ConstraintLayout (гибкая система привязок), LinearLayout (линейное расположение), RelativeLayout (относительное позиционирование), FrameLayout (наложение слоёв). В iOS Core Auto Layout использует систему констрейнтов (NSLayoutConstraint) для описания расположения элементов. SwiftUI и Flutter используют VStack/HStack/ZStack и Row/Column/Stack соответственно.

Единицы измерения и адаптивная вёрстка

UI-компоненты мобильных устройств отображаются с учётом разной плотности пикселей. Чтобы интерфейс выглядел одинаково на всех экранах, используются независимые единицы измерения.

Единица Платформа Описание
dpAndroidDensity-independent Pixels — абстрактная единица, равная 1px на экране mdpi
spAndroidScale-independent Pixels — для шрифтов, учитывает настройки размера текста пользователя
ptiOSPoints — типографская единица, 1pt = 1px на экране 1x (не Retina)
pxAllФизические пиксели экрана — не рекомендуется для вёрстки из-за разной плотности

Плотности экрана классифицируются: mdpi (160 dpi, 1x), hdpi (240 dpi, 1.5x), xhdpi (320 dpi, 2x), xxhdpi (480 dpi, 3x), xxxhdpi (640 dpi, 4x). При подготовке изображений нужно создавать ресурсы для всех плотностей: icon.png, icon_hdpi.png, icon_xhdpi.png и так далее. Векторные форматы (VectorDrawable в Android, SF Symbols в iOS) решают проблему множества растро-ресурсов.

В IT Sectr мы используем коэффициент масштабирования для экспорта иконок из Figma: экспортируем в 1x, 2x, 3x для iOS и mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi для Android. Это гарантирует чёткое отображение на всех устройствах включая планшеты и складные смартфоны.

Современные концепции UI: Dark Mode, Safe Area, Accessibility

Современные UI-компоненты мобильных приложений обязаны поддерживать ряд стандартов, без которых пользовательский опыт будет неполным.

Dark Mode / Light Mode

Dark Mode (тёмная тема) — обязательная опция в современных приложениях. Material Design 3 и iOS 13+ предоставляют встроенную поддержку тёмной темы. Важно не инвертировать цвета, а использовать отдельные цветовые палитры: тёмный фон, светлый текст, пониженный контраст для второстепенных элементов. Автоматическое переключение можно привязать к системной теме устройства.

Safe Area и учёт Notch / Dynamic Island

Современные iPhone имеют Notch (вырез под фронтальную камеру) и Dynamic Island. Android-устройства также имеют вырезы и скруглённые углы (Corner Radius). Safe Area — область экрана, гарантированно свободная от системных элементов (статус-бар, индикатор home), навигационной панели и вырезов. iOS автоматически применяет Safe Area Insets; Android требует явной проверки через WindowInsets или DisplayCutout.

Accessibility (a11y)

Accessibility обеспечивает доступность приложения для людей с ограниченными возможностями. Ключевые требования: поддержка TalkBack (Android) и VoiceOver (iOS), корректные contentDescription для ImageView, достаточный цветовой контраст (минимум 4.5:1 для текста), поддержка Dynamic Type (iOS) для масштабирования шрифтов, навигация без зрения и альтернативы жестам. WCAG 2.1 — международный стандарт доступности.

Globalization и Localization (i18n / l10n)

Интернационализация (i18n) — подготовка приложения к поддержке нескольких языков и региональных форматов. Локализация (l10n) — перевод строк, дат, валют и культурных особенностей. Android использует ресурсные каталоги (values-ru, values-de), iOS — Localizable.strings и XLIFF. Flutter поддерживает flutter_localizations с ARB-файлами переводов.

Жесты и взаимодействие

Сенсорное взаимодействие включает множество жестов: Tap (касание), Long Press (долгое нажатие), Swipe (смахивание), Pinch-to-Zoom (масштабирование), Pull-to-Refresh (обновление потягиванием), Drag-and-Drop (перетаскивание). Android использует GestureDetector, iOS — UIGestureRecognizer. В iOS также доступны 3D Touch (Force Touch) и Haptic Touch с тактильной обратной связью через Taptic Engine.

Часто задаваемые вопросы

Чем отличается Material Design от Human Interface Guidelines?

Material Design (Google) использует «материальную» метафору с тенями, слоями и анимированными переходами, а HIG (Apple) опирается на чистоту, Safe Area и Dynamic Type. Material Design рекомендован для Android, HIG — для iOS. Выбор дизайн-системы также влияет на навигацию: в Android преобладает Bottom Navigation и Navigation Drawer, в iOS — Tab Bar и Navigation Controller.

Что выбрать: Jetpack Compose или SwiftUI?

Jetpack Compose — декларативный фреймворк для Android, SwiftUI — для iOS. Оба используют декларативный подход и упрощают разработку UI. Compose теснее интегрирован с Kotlin и Android Architecture Components, SwiftUI — с Combine и всей экосистемой Apple.

Что такое адаптивный дизайн в мобильных приложениях?

Адаптивный дизайн — подход, при котором интерфейс подстраивается под размер экрана, ориентацию и плотность пикселей. Используются относительные единицы (dp, sp, pt), Auto Layout или ConstraintLayout. Планшеты, складные устройства и десктопные окна (iPad Stage Manager) требуют дополнительных адаптаций: Split View, master-detail layout.

Какие единицы измерения используются в мобильном UI?

dp (density-independent pixels) и sp (scale-independent pixels) в Android, pt (points) в iOS. px — аппаратные пиксели. dp и pt обеспечивают одинаковый физический размер на разных плотностях экрана: mdpi (1x), hdpi (1.5x), xhdpi (2x), xxhdpi (3x), xxxhdpi (4x).

Что такое accessibility (a11y) и почему это важно?

Accessibility — доступность интерфейса для людей с ограниченными возможностями: поддержка экранных дикторов, крупного текста, контраста. Без a11y приложение не будет допущено к публикации в App Store или Google Play. Кроме того, доступность улучшает UX для всех пользователей: например, поддержка Dynamic Type помогает людям с ослабленным зрением.

Итоги

  • Material Design (Android) и Human Interface Guidelines (iOS) — обязательны к изучению для любого мобильного разработчика
  • Декларативные фреймворки SwiftUI и Jetpack Compose — стандарт для новых проектов
  • Нативные компоненты (RecyclerView, UITableView, NavigationView) остаются актуальны для поддержки легаси
  • Единицы dp / sp / pt обеспечивают корректное отображение на всех плотностях экрана
  • Safe Area, Dark Mode и Accessibility — обязательные требования для современных приложений
  • Flutter Widgets и кроссплатформенные решения требуют знаний обеих платформ
  • Жестовое управление (swipe, pinch-to-zoom, pull-to-refresh) — неотъемлемая часть мобильного UX

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект