Window Size Class — что это, классы размеров и разработка

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

Window Size Class — это API из Jetpack WindowManager, который делит окно приложения на три категории: Compact, Medium и Expanded. Вместо проверки физического разрешения или плотности пикселей, классы анализируют доступную ширину в dp — это даёт предсказуемый результат на любых устройствах. По данным Android Developers Documentation (2025), Window Size Class стал стандартом для адаптивных интерфейсов в Jetpack Compose и View-системе благодаря WindowManager.

Главное

  • Window Size Class — API для категоризации ширины окна на Compact, Medium и Expanded.
  • Compact — класс для узких окон до 600 dp, типичных для телефонов в портретном режиме.
  • Medium — класс для окон 600–840 dp, характерных для планшетов в портрете и телефонов в альбоме.
  • Expanded — класс для широких окон от 840 dp, встречающихся на планшетах и десктопе.
  • Material Design 3 использует Window Size Class как основу для adaptive layout.

Что такое Window Size Class?

Window Size Class — это API платформы Android, входящий в библиотеку Jetpack WindowManager, который классифицирует доступное пространство окна приложения по трём категориям. В отличие от традиционного подхода с квантификаторами ресурсов (small/large/xlarge), Window Size Class даёт дискретный набор значений, на которые разработчик может опираться при проектировании интерфейса.

API появился в Android 7.0 Nougat как часть поддержки многооконного режима, но активное внедрение началось с Jetpack WindowManager 1.1 (2022). Google рекомендует Window Size Class как основной инструмент для построения адаптивных макетов вместо проверки ширины экрана через Display.getSize().

Классификация основана на ширине окна в dp, а не на физическом размере или плотности пикселей. Это значит, что два устройства с разным разрешением, но одинаковой шириной в dp получат одинаковый класс — интерфейс будет предсказуемо одинаковым.

Три класса размеров окна Android

Compact — класс для окон шириной до 600 dp. Телефон в портретном режиме, большинство раскладушек (Galaxy Z Flip) в сложенном состоянии. Интерфейс строится в один столбец, навигация через Bottom Navigation.

Medium — класс для окон шириной 600–840 dp. Планшет в портрете, телефон в альбоме, складное устройство в полураскрытом состоянии. Интерфейс использует два столбца — например, список слева и детали справа. Navigation Rail заменяет Bottom Navigation.

Expanded — класс для окон шириной от 840 dp. Планшет в альбоме, десктопное окно, складное устройство в разложенном виде. Интерфейс может использовать три и более панелей, Permanent Navigation Drawer, панели инструментов.

В Material Design 3 для каждого класса определены адаптивные компоненты: Navigation Rail для Medium, Navigation Drawer для Expanded, Bottom Navigation для Compact. Разработчику не нужно подбирать breakpoints — они уже заданы API.

Как работает Window Size Class

Window Size Class вычисляется на основе текущей ширины окна приложения в dp с учётом системных элементов — строки состояния, панели навигации, деления экрана в Split Screen. API срабатывает при изменении конфигурации окна: повороте устройства, входе в многооконный режим, раскладывании складного устройства.

Для получения класса используется класс WindowSizeClass из библиотеки androidx.window. Разработчик подписывается на Flow (Kotlin) или LiveData (Java), который автоматически обновляет класс при каждом изменении размеров окна — без ручной обработки onConfigurationChanged.

Классификация происходит в три шага. Первый — измерение текущей ширины окна в пикселях. Второй — конвертация в dp через DisplayMetrics.density. Третий — сравнение полученного значения с порогами: меньше 600 dp — Compact, 600–840 — Medium, от 840 — Expanded.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // compact width
    WindowWidthSizeClass.MEDIUM  -> // medium width
    WindowWidthSizeClass.EXPANDED -> // expanded width
}

Помимо ширины (windowWidthSizeClass), API предоставляет класс для высоты окна (windowHeightSizeClass) — полезно для альбомной ориентации и десктопных окон.

Window Size Class в Jetpack Compose

В Jetpack Compose Window Size Class используется через функцию currentWindowAdaptiveInfo(), которая возвращает WindowAdaptiveInfo с классами ширины и высоты. Эта функция учитывает не только размер окна, но и тип ввода (клавиатура, мышь, сенсор) — через WindowPosture и WindowLayoutInfo.

Типовой сценарий — переключение между лейаутами в зависимости от класса. Например, на Compact отображается BottomSheet с выбором, на Medium — боковая панель, на Expanded — постоянный Navigation Drawer.

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

В Material Design 3 компоненты NavigationSuiteScaffold автоматически подстраиваются под Window Size Class — разработчику не нужно писать условную логику.

Window Size Class и Material Design 3

Material Design 3 (Material You) полностью интегрирован с Window Size Class. Система adaptive layout в Material 3 определяет, какой компонент навигации использовать на каждом классе: BottomNavigation для Compact, NavigationRail для Medium, NavigationDrawer для Expanded.

Эта интеграция работает на уровне Adaptive API, который объединяет Window Size Class с другими сигналами — FoldState (складное устройство) и WindowPosture (положение экрана). Adaptive API доступен через библиотеку material3-adaptive.

Material 3 предоставляет четыре адаптивных компонента верхнего уровня: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold и AdaptiveSheet. Каждый из них меняет своё поведение в зависимости от Window Size Class без дополнительной настройки.

КлассNavigation ComponentPane Scaffold
CompactBottom NavigationСкрытая панель
MediumNavigation RailВыдвижная панель
ExpandedNavigation DrawerПостоянная панель

Преимущества адаптивных макетов

Использование Window Size Class даёт три ключевых преимущества в мобильной разработке. Первое — предсказуемость: вместо сотен комбинаций размеров экрана разработчик работает с тремя классами. Это радикально сокращает количество тестовых сценариев и багов, связанных с разметкой.

Второе — автоматическая адаптация к многооконному режиму. Когда пользователь входит в Split Screen, ширина окна меняется — Window Size Class мгновенно пересчитывается, и интерфейс подстраивается. Без этого API приложение в разделённом экране показывает урезанную версию интерфейса для телефона.

Третье — консистентность с Material Design 3. Google встроил Window Size Class в систему адаптивных компонентов, поэтому интерфейсы, построенные на Material 3, автоматически следуют рекомендациям Google по large screen-дизайну без дополнительной работы.

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

Чем Window Size Class отличается от Screen Size Buckets?

Screen Size Buckets (small/large/xlarge) — устаревший подход Android 1.6–6.0, основанный на физическом размере экрана. Window Size Class ориентируется на доступную ширину окна в dp и работает в реальном времени при изменении размера окна.

Нужно ли поддерживать Window Size Class на Android 6 и ниже?

Window Size Class доступен через Jetpack WindowManager на Android 7.0+ с backport-библиотекой. Для Android 6 и ниже — только Compact, так как multi-window отсутствует. Используйте fallback через WindowMetrics.

Как Window Size Class работает на складных устройствах?

При раскладывании устройства ширина окна меняется, и Window Size Class пересчитывается автоматически. Класс может измениться с Compact на Expanded за счёт увеличения доступной области.

Можно ли использовать Window Size Class в XML-разметке (Views)?

Да, через WindowManager в Activity или Fragment. После получения WindowSizeClass используйте условную логику для переключения между XML-лейаутами или изменения видимости View.

Какие пороги используются для WindowHeightSizeClass?

Для высоты окна пороги отличаются: Compact — до 480 dp, Medium — 480–900 dp, Expanded — от 900 dp. WindowHeightSizeClass полезен в альбомной ориентации и на десктопе.

Итоги

  • Window Size Class — API Jetpack WindowManager для категоризации ширины окна на Compact, Medium и Expanded.
  • Compact — до 600 dp, одноколоночный интерфейс, Bottom Navigation.
  • Medium — 600–840 dp, двухколоночный интерфейс, Navigation Rail.
  • Expanded — от 840 dp, многопанельный интерфейс, Navigation Drawer.
  • Jetpack Compose — функция currentWindowAdaptiveInfo() для получения класса в рантайме.
  • Material Design 3 — адаптивные компоненты автоматически реагируют на Window Size Class.
  • Заключение — Window Size Class заменяет традиционную адаптацию на breakpoints и делает интерфейсы предсказуемыми на всех устройствах.

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

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

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

Читайте также