Перейти к содержимому

Android Design Guidelines

Android Design Guidelines: Полный гайд для мобильных приложений

Заголовок раздела «Android Design Guidelines: Полный гайд для мобильных приложений»

Этот гайд основан на официальной документации Android (developer.android.com/design) и содержит Android-специфичные рекомендации по дизайну, которые дополняют Material Design 3. Используйте его для оценки дизайн-макетов на соответствие стандартам платформы.


Каждое Android-приложение состоит из трёх основных регионов:

РегионОписаниеЭлементы
System BarsСистемные панели вверху и внизу экранаStatus bar, Navigation bar, Caption bar
NavigationНавигация приложенияNavigation bar, Navigation drawer, Tabs
BodyОсновной контент экранаКонтент, компоненты, действия

Критическое правило: Body-контент должен продолжаться под navigation и system bar regions при использовании edge-to-edge дизайна.


СвойствоЗначение
Высота~24dp (варьируется)
ПозицияВерх экрана
СодержимоеNotification icons, system icons (время, батарея, сеть)
СтилиTransparent, Translucent

Рекомендации:

  • ✅ Делайте status bar transparent или translucent
  • ✅ Контент приложения должен простираться за status bar (edge-to-edge)
  • ✅ Иконки status bar должны иметь достаточный контраст с фоном
  • ❌ Не используйте непрозрачный (opaque) status bar

Типы навигации:

ТипОписаниеВысота
Gesture NavigationСвайпы для навигации, только gesture handle~24dp
3-Button NavigationКнопки Back, Home, Overview~48dp
2-Button NavigationУстаревший, Back + Home~48dp

Gesture Navigation:

  • Свайп от левого/правого края → Назад
  • Свайп вверх от низа → Домой
  • Свайп вверх и удержание → Overview (последние приложения)

Важные спецификации:

Gesture handle insets: ~20-24dp от левого и правого края
Gesture navigation bar: всегда прозрачная
3-button navigation: полупрозрачная с scrim

Рекомендации:

  • ✅ Gesture navigation bar — всегда прозрачная
  • ✅ Поддерживайте dynamic color adaptation
  • ✅ Избегайте touch targets и drag gestures в gesture inset areas
  • ❌ Не добавляйте background к gesture navigation bar

Система автоматически адаптирует цвет системных элементов (gesture handle) в зависимости от контента под ними:

  • Светлый контент → тёмный handle
  • Тёмный контент → светлый handle

Edge-to-edge — дизайн-подход, при котором контент приложения отрисовывается под системными панелями для иммерсивного опыта.

Android 15+: Edge-to-edge применяется автоматически. Для обратной совместимости используйте enableEdgeToEdge().

Тип InsetПрименение
System Bar InsetsUI, которому нужно избежать перекрытия system bars
System Gesture InsetsОбласти жестов системы (back gesture, home gesture)
Display Cutout InsetsОбласти камеры, notch, punch-hole
IME InsetsОбласть экранной клавиатуры
Safe DrawingБезопасная зона для отрисовки
Safe GesturesБезопасная зона от конфликтов с системными жестами
ЭлементПоведение
BackgroundsРастягиваются edge-to-edge
DividersРастягиваются edge-to-edge
Text & ButtonsДолжны быть inset от system bars
Critical UIНе размещайте под display cutouts
Touch targetsНе размещайте полностью под gesture insets

Пример: Top App Bar

✅ Фон top app bar растягивается до верха экрана за status bar
✅ Контент (title, icons) inset на высоту status bar
✅ При скролле — добавьте translucent gradient protection

Пример: Bottom Navigation

✅ Фон растягивается до низа экрана за navigation bar
✅ Icons и labels inset на высоту navigation bar
РекомендацияОписание
Critical UIInset с помощью display cutout insets
Solid app barsМогут рисоваться в область cutout
Horizontal carouselsДолжны прокручиваться через cutout
Landscape modeОсобое внимание к cutouts по краям

СпецификацияЗначение
Минимальный touch target≥48dp × 48dp
Физический размер~9mm
Минимальный spacing≥8dp между targets

Правило: Touch target может быть больше визуального элемента. Например, иконка 24dp должна иметь touch target 48dp.

Тип контентаМинимальный контраст
Текст (normal)≥4.5:1
Текст (large, ≥18pt)≥3:1
Non-text elements≥3:1

Проверка контраста:

  • Используйте Material’s Accessible color system
  • HCT (Hue, Chroma, Tone) обеспечивает перцептуально точные расчёты
  • Цвета с одинаковым tone недоступны для определённых контекстов
  • Описывайте UI-элементы в коде через Semantics properties
  • Предоставляйте текстовые описания для иконок и изображений
  • Не полагайтесь только на жесты — создавайте accessibility actions
ФункцияОписание
Voice AccessГолосовое управление устройством
Switch AccessУправление через внешние устройства
Haptic feedbackТактильная обратная связь

Android использует 3 основных класса размеров:

КлассШиринаТипичные устройства
Compact< 600dp99.96% телефонов (portrait)
Medium600–839dp93.73% планшетов (portrait), foldables
Expanded≥ 840dp97.22% планшетов (landscape), desktop

Адаптивная навигация:

Compact → Navigation Bar (bottom)
Medium → Navigation Rail (side)
Expanded → Navigation Drawer (persistent)
ЕдиницаОписание
dpDensity-independent pixels для размеров
spScalable pixels для шрифтов (учитывает user preferences)

Критическое правило: Всегда указывайте размеры шрифтов в sp, а не в dp или px.

GridПрименение
8dpОсновной grid для большинства UI-элементов
4dpДля мелких элементов (иконки, spacing)

Рекомендация: Все размеры и отступы должны быть кратны 4dp или 8dp.

BreakpointКолонкиMarginsGutters
Compact (< 600dp)416dp16dp
Medium (600–839dp)824–32dp24dp
Expanded (≥ 840dp)1232dp24dp
Класс размераMargins
Compact16dp
Medium24–32dp
Expanded32dp+

Важно: Margins определяют границы контента от краёв экрана. Body content и actions должны оставаться в пределах margins.

Рекомендуемые соотношения сторон:

RatioПрименение
1:1Квадратные изображения, аватары
4:3Фотографии, thumbnails
16:9Видео, hero images
3:2Фотографии
ТипОписание
Implicit containmentБелое пространство для визуальной группировки
Explicit containmentDividers, cards, surfaces для группировки

Принцип: Группируйте связанный контент вместе, разделяйте несвязанный.

ПозицияCSS-аналог
Startleft (LTR) / right (RTL)
Endright (LTR) / left (RTL)
Centercenter
Top/Bottomtop/bottom
ТипФорматПрименение
IconsVector (SVG, VectorDrawable)Системные иконки, navigation
IllustrationsVector или высокого разрешенияHero images, spot illustrations
PhotosBitmap (JPEG, PNG, WebP)Фотоконтент

Рекомендации:

  • ✅ Используйте vector formats первыми, когда возможно
  • ✅ Предоставляйте assets для разных density buckets (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi)
  • ✅ Избегайте текста внутри графических ассетов
  • ✅ Добавляйте scrim между фоновыми изображениями и текстом
  • Animated Vector Drawables — для маленьких UI-анимаций
  • Lottie — для сложных анимаций
  • Programmatic animations — для гибкости и меньшего размера

ТипОбласть действия
System themesВесь UI устройства
App themesТолько внутри приложения
ТемаОписание
LightСветлые поверхности, тёмный текст
DarkТёмные поверхности, светлый текст
Dynamic ColorЦвета из обоев пользователя (Android 12+)
High ContrastПовышенный контраст для accessibility

Рекомендации:

  • ✅ Поддерживайте и Light, и Dark темы
  • ✅ Respect системные настройки пользователя
  • ✅ Создайте custom fallback тему, если dynamic color недоступен
  • ❌ Не “залочивайте” приложение только на Light тему

Доступен с Android 12+. Извлекает цвета из обоев пользователя.

Тональные палитры:

Primary, Secondary, Tertiary, Neutral, Neutral Variant
Каждая с тонами: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 99, 100
RoleПрименение
PrimaryГлавные интерактивные элементы
On PrimaryКонтент на primary
Primary ContainerФон выделенных элементов
SecondaryМенее prominent элементы
TertiaryАкценты для баланса
SurfaceФоны поверхностей
OutlineГраницы, разделители
ErrorОшибки и предупреждения

MD3 использует тональную элевацию — все цвета производятся из тональных палитр для глубины и контраста.

Surface RoleТон (Light)Тон (Dark)
Surface996
Surface Container Lowest1004
Surface Container Low9610
Surface Container9412
Surface Container High9217
Surface Container Highest9022

Используйте токены вместо hardcoded hex-значений:

✅ button-container-color = primary
❌ button-container-color = #6750A4
RoleSize (sp)Line HeightWeight
Display Large5764400
Display Medium4552400
Display Small3644400
Headline Large3240400
Headline Medium2836400
Headline Small2432400
Title Large2228500
Title Medium1624500
Title Small1420500
Body Large1624400
Body Medium1420400
Body Small1216400
Label Large1420500
Label Medium1216500
Label Small1116500

Default typeface: Roboto

  • ✅ Используйте sp для всех размеров шрифтов
  • ✅ Поддерживайте user font size preferences
  • ✅ Line height ratio: ~1.2× (120%) от размера шрифта
  • ✅ Создавайте иерархию через weight, size, и color
  • ❌ Не используйте декоративные шрифты для body text

КомпонентWindow SizeDestinations
Navigation BarCompact3–5
Navigation RailMedium3–7 + FAB
Navigation DrawerExpanded5+
КомпонентПрименение
TabsГруппировка sibling-контента
Bottom App BarДополнительные actions + FAB
Top App BarNavigation icon, title, actions

Predictive Back — жест навигации назад с превью destination перед commit.

  1. Пользователь свайпает от края экрана
  2. Приложение показывает preview назначения
  3. Пользователь решает:
    • Отпустить до 50% → отмена, возврат к текущему экрану
    • Продолжить за 50% → commit, переход назад
ПараметрЗначение
Margins5% ширины с каждой стороны
Scale (max)90%
Corner radius (max)32dp
Commit threshold50%
Interpolator(0.1, 0.1, 0, 1)

Рекомендации:

  • ✅ Не размещайте touch targets под gesture insets
  • ✅ При отмене — плавный возврат к исходному состоянию
  • ✅ При commit — fade through к следующему состоянию
ПравилоОписание
IncludeРедко используемые preferences
ExcludeЧасто используемые actions (разместите в контексте)
SaveВсегда сохраняйте user preferences
AvoidApp info, account management, system-level settings
ПриоритетПозиция
High priorityВ primary navigation (nav bar, drawer, rail)
StandardВ top app bar menu (после всех items, кроме Help)
CombinedМожно объединить с Account/Profile
PatternПрименение
Toggle (Switch)Boolean settings
Radio buttonsSingle choice из нескольких опций
SliderRange values
Date/Time pickerСбор даты/времени
ListНавигация к subscreens

Android Sharesheet позволяет делиться контентом между приложениями.

Рекомендации:

  • ✅ Используйте системный Share sheet
  • ✅ Поддерживайте соответствующие MIME types
  • ✅ Предоставляйте preview контента

ЭлементОписание
App iconМонохромная 2D-иконка приложения
Header textНазвание приложения или канала
TimestampВремя получения
Primary contentОсновной текст уведомления
Large iconОпциональная большая иконка (например, аватар)
ActionsДо 3 кнопок действий
TemplateПрименениеОсобенности
StandardБольшинство уведомленийКраткий текст, large icon, actions
Big TextДлинный текстРасширяемый preview
Big PictureИзображенияThumbnail → full preview
ProgressДлительные операцииProgress bar, cancel action
MediaМедиа-плеерДо 5 actions, playback controls
MessagingStyleЧатыИстория сообщений, inline reply
CallStyleЗвонкиIncoming/outgoing call UI
Live UpdatesОтслеживание прогрессаDelivery, navigation, sports
  • Timely — отправляйте, когда информация актуальна
  • Relevant — только важный для пользователя контент
  • Actionable — давайте возможность действовать
  • Brief — краткие сообщения

Рекомендации:

  • ✅ Используйте Notification Channels для категоризации
  • ✅ Поддерживайте inline reply для messaging apps
  • ✅ Не злоупотребляйте уведомлениями
  • ❌ Не используйте уведомления для рекламы

Рекомендуемые размеры (в grid cells):

РазмерCells (Phone)Cells (Tablet)Применение
Small2×23×3Quick actions, status
Medium4×24×3Lists, info display
Large4×46×4Rich content, detailed info

Атрибуты:

targetCellWidth / targetCellHeight — для widget picker
minWidth / minHeight — минимальные размеры
minResizeWidth / minResizeHeight — для resizable widgets
ПринципОписание
Edge-to-edgeContainer растягивается до краёв grid
System corner radiusИспользуйте системное скругление
BreakpointsАдаптируйте layout при изменении размера
ResponsiveRectangular containers, не fixed squares
  • ✅ Поддерживайте Light и Dark themes
  • ✅ Используйте Dynamic Color (Android 12+)
  • ✅ Применяйте Material color tokens
  • ✅ Corner radius: системное значение (для consistency)
LayoutПрименение
Text-focusedStatus, titles, descriptions
ListScrollable items
GridImage galleries
ToolbarQuick actions
SearchSearch bar + quick actions
СвойствоЗначение
ПозицияQuick Settings panel (notification shade pulldown)
НазначениеБыстрые toggles и shortcuts
ПримерыWiFi, Bluetooth, Flashlight, custom app actions

Immersive Mode скрывает system bars для полноэкранного опыта.

СценарийРекомендация
Video playbackСкрывайте bars, tap to reveal
GamesИзбегайте случайных выходов
Reading (books)Full engagement
PresentationsFull-screen focus
  • ✅ Предоставьте интуитивный способ показать UI (tap)
  • ✅ Добавьте overlay/scrim для текста и controls
  • ✅ Поддерживайте PiP и Chromecast
  • ❌ Никогда не скрывайте system bars навсегда на личных устройствах
  • ❌ Не используйте для всего контента (только для специфичных случаев)
СвойствоОписание
ПозицияTopmost layer, в углу экрана
РазмерSmall window
ControlsClose, fullscreen, settings, playback

Use Cases:

  • Video playback при навигации
  • Video call во время работы с контентом
  • Продолжение контента при выборе нового

Рекомендации:

  • setAutoEnterEnabled(true) для smooth transitions (Android 12+)
  • ✅ Скрывайте UI elements в PiP mode
  • ✅ Продолжайте playback
  • ✅ Поддерживайте basic controls

Canonical Layouts — готовые композиции для адаптивных layouts.

LayoutПрименениеWindow Size
List-DetailMaster-detail navigationMedium, Expanded
FeedScrollable contentAll sizes
Supporting PaneMain content + side panelExpanded
Window SizePrimary NavBehavior
CompactNavigation BarBottom, 3-5 items
MediumNavigation RailSide, 3-7 items + FAB
ExpandedNavigation DrawerPersistent, unlimited items

Правило: Navigation Rail и Navigation Drawer не должны конфликтовать с system bars при edge-to-edge.

Multi-window modes:

  • Split-screen
  • Freeform windows
  • Desktop windowing

Foldable considerations:

  • Hinge awareness
  • Tabletop posture (half-folded)
  • Book posture

Рекомендации:

  • ✅ Тестируйте на разных window sizes
  • ✅ Используйте WindowInsets для safe areas
  • ✅ Поддерживайте landscape и portrait
  • ✅ Адаптируйте layout для foldable postures

Material Design 3 компоненты делятся на 5 категорий:

КатегорияКомпоненты
ActionButtons, FAB, Icon buttons, Segmented buttons
ContainmentCards, Dialogs, Bottom sheets, Side sheets
NavigationNavigation bar, Navigation rail, Navigation drawer, Tabs, Top app bar
SelectionCheckbox, Radio, Switch, Chip, Slider, Date/Time pickers
Text InputText fields
КомпонентВысотаTouch TargetCorner Radius
Button40dp≥48dp20dp (pill)
FAB56dp56dp16dp
Small FAB40dp40dp12dp
Large FAB96dp96dp28dp
Navigation Bar80dp
Top App Bar64dp
Chip32dp≥48dp8dp
Text Field56dp4dp
Switch Track32dp≥48dp16dp (full)
Checkbox18dp≥48dp2dp
CardVariable12dp
DialogVariable28dp

#КритерийТребование
1Touch targets≥48×48dp
2Touch target spacing≥8dp
3Text contrast (normal)≥4.5:1
4Text contrast (large)≥3:1
5Non-text contrast≥3:1
6Baseline gridКратно 8dp (4dp для мелких элементов)
7Font sizesВ sp, не px или dp
8Margins (Compact)16dp
9System barsTransparent или translucent
10Edge-to-edgeКонтент под system bars
#КритерийCompactMediumExpanded
11Columns4812
12Primary navNav BarNav RailNav Drawer
13Nav destinations3-53-75+
#КритерийТребование
14Button height40dp
15FAB size56×56dp
16Navigation Bar height80dp
17Top App Bar height64dp
18Chip height32dp
19Text field height56dp
20Card corner radius12dp
21Dialog corner radius28dp
#КритерийТребование
22Light themeПоддерживается
23Dark themeПоддерживается
24Dynamic ColorПоддерживается (Android 12+)
25Color tokensИспользуются вместо hardcoded values
#КритерийТребование
26Content descriptionsДля иконок и изображений
27Scalable fontssp units
28Gesture alternativesActions для всех жестов
29Focus statesДля всех interactive elements

Следующие темы требуют отдельного глубокого исследования для полной картины:

  1. Wear OS Design — дизайн для умных часов
  2. Android TV Design — дизайн для телевизоров
  3. Android Automotive Design — дизайн для автомобилей
  4. Android XR Design — дизайн для VR/AR
  5. Compose-specific patterns — паттерны для Jetpack Compose
  6. Animation & Motion specs — детальные спецификации анимаций
  7. Accessibility testing — методы тестирования доступности
  8. Localization — адаптация для разных языков и регионов

Источники: Официальная документация Android Developers (developer.android.com/design)