Window Size Class é uma API do Jetpack WindowManager que divide a janela da aplicação em três categorias: Compact, Medium e Expanded. Em vez de verificar a resolução física ou densidade de pixels, as classes analisam a largura disponível em dp — isso dá um resultado previsível em qualquer dispositivo. De acordo com Android Developers Documentation (2025), Window Size Class tornou-se o padrão para interfaces adaptativas no Jetpack Compose e no sistema View graças ao WindowManager.
Principais pontos
Window Size Class é uma API da plataforma Android incluída na biblioteca Jetpack WindowManager que classifica o espaço disponível da janela da aplicação em três categorias. Ao contrário da abordagem tradicional com qualificadores de recursos (small/large/xlarge), Window Size Class fornece um conjunto discreto de valores nos quais o desenvolvedor pode confiar ao projetar a interface.
A API apareceu no Android 7.0 Nougat como parte do suporte ao modo multijanela, mas a adoção ativa começou com Jetpack WindowManager 1.1 (2022). Google recomenda Window Size Class como ferramenta principal para construir layouts adaptativos em vez de verificar a largura da tela através de Display.getSize().
A classificação é baseada na largura da janela em dp, não no tamanho físico ou densidade de pixels. Isso significa que dois dispositivos com resoluções diferentes mas mesma largura em dp receberão a mesma classe — a interface será previsivelmente idêntica.
Compact — classe para janelas até 600 dp de largura. Telemóvel em modo retrato, a maioria dos dobráveis (Galaxy Z Flip) em estado dobrado. A interface é construída numa coluna, navegação via Bottom Navigation.
Medium — classe para janelas de 600–840 dp de largura. Tablet em retrato, telemóvel em paisagem, dispositivo dobrável em estado semiaberto. A interface usa duas colunas — por exemplo, uma lista à esquerda e detalhes à direita. Navigation Rail substitui Bottom Navigation.
Expanded — classe para janelas a partir de 840 dp de largura. Tablet em paisagem, janela de desktop, dispositivo dobrável em estado aberto. A interface pode usar três ou mais painéis, Permanent Navigation Drawer, painéis de ferramentas.
No Material Design 3, componentes adaptativos são definidos para cada classe: Navigation Rail para Medium, Navigation Drawer para Expanded, Bottom Navigation para Compact. O desenvolvedor não precisa selecionar breakpoints — eles já estão definidos pela API.
Window Size Class é calculado com base na largura atual da janela da aplicação em dp, levando em conta elementos do sistema — barra de status, barra de navegação, divisão de ecrã em Split Screen. A API é acionada quando a configuração da janela muda: rotação do dispositivo, entrada no modo multijanela, abertura de um dispositivo dobrável.
Para obter a classe, é usada a classe WindowSizeClass da biblioteca androidx.window. O desenvolvedor subscreve um Flow (Kotlin) ou LiveData (Java) que atualiza automaticamente a classe a cada mudança de tamanho de janela — sem manipulação manual de onConfigurationChanged.
A classificação ocorre em três passos. Primeiro — medir a largura atual da janela em pixels. Segundo — converter para dp via DisplayMetrics.density. Terceiro — comparar o valor obtido com os limites: menos de 600 dp — Compact, 600–840 — Medium, a partir de 840 — Expanded.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // compact width
WindowWidthSizeClass.MEDIUM -> // medium width
WindowWidthSizeClass.EXPANDED -> // expanded width
}
Além da largura (windowWidthSizeClass), a API fornece uma classe para a altura da janela (windowHeightSizeClass) — útil para orientação paisagem e janelas de desktop.
No Jetpack Compose, Window Size Class é usado através da função currentWindowAdaptiveInfo(), que retorna WindowAdaptiveInfo com as classes de largura e altura. Esta função leva em conta não só o tamanho da janela mas também o tipo de entrada (teclado, rato, toque) — através de WindowPosture e WindowLayoutInfo.
Um cenário típico é alternar entre layouts conforme a classe. Por exemplo, no Compact é exibida uma BottomSheet com seleção, no Medium — um painel lateral, no Expanded — um Navigation Drawer permanente.
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
No Material Design 3, os componentes NavigationSuiteScaffold adaptam-se automaticamente ao Window Size Class — o desenvolvedor não precisa escrever lógica condicional.
Material Design 3 (Material You) está totalmente integrado com Window Size Class. O sistema de layout adaptativo no Material 3 determina qual componente de navegação usar para cada classe: BottomNavigation para Compact, NavigationRail para Medium, NavigationDrawer para Expanded.
Esta integração funciona ao nível da Adaptive API, que combina Window Size Class com outros sinais — FoldState (dispositivo dobrável) e WindowPosture (posição do ecrã). Adaptive API está disponível através da biblioteca material3-adaptive.
Material 3 fornece quatro componentes adaptativos de alto nível: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold e AdaptiveSheet. Cada um deles altera o seu comportamento conforme Window Size Class sem configuração adicional.
| Classe | Componente de navegação | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | Painel oculto |
| Medium | Navigation Rail | Painel deslizante |
| Expanded | Navigation Drawer | Painel permanente |
Usar Window Size Class proporciona três vantagens principais no desenvolvimento móvel. Primeira — previsibilidade: em vez de centenas de combinações de tamanhos de ecrã, o desenvolvedor trabalha com três classes. Isso reduz radicalmente o número de cenários de teste e bugs relacionados com layout.
Segunda — adaptação automática ao modo multijanela. Quando o utilizador entra no Split Screen, a largura da janela muda — Window Size Class recalcula instantaneamente e a interface adapta-se. Sem esta API, a aplicação em ecrã dividido mostra uma versão reduzida da interface de telemóvel.
Terceira — consistência com Material Design 3. Google incorporou Window Size Class no sistema de componentes adaptativos, por isso as interfaces construídas no Material 3 seguem automaticamente as recomendações de design de ecrãs grandes da Google sem trabalho adicional.
Perguntas frequentes
Screen Size Buckets (small/large/xlarge) é uma abordagem obsoleta do Android 1.6–6.0 baseada no tamanho físico do ecrã. Window Size Class foca-se na largura disponível da janela em dp e funciona em tempo real quando o tamanho da janela muda.
Window Size Class está disponível através do Jetpack WindowManager no Android 7.0+ com uma biblioteca backport. Para Android 6 e versões anteriores — apenas Compact, pois não existe modo multijanela. Use fallback através de WindowMetrics.
Ao abrir o dispositivo, a largura da janela muda e Window Size Class recalcula automaticamente. A classe pode mudar de Compact para Expanded devido ao aumento da área disponível.
Sim, através do WindowManager na Activity ou Fragment. Após obter WindowSizeClass, use lógica condicional para alternar entre layouts XML ou alterar a visibilidade das Views.
Para a altura da janela, os limites diferem: Compact — até 480 dp, Medium — 480–900 dp, Expanded — a partir de 900 dp. WindowHeightSizeClass é útil na orientação paisagem e no desktop.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também