Window Size Class — o que é, classes de tamanho e desenvolvimento

Autor: IT Sectr Publicado: 2026-06-08 Tempo de leitura: 9 min

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 — API para categorizar a largura da janela em Compact, Medium e Expanded.
  • Compact — classe para janelas estreitas até 600 dp, típicas de telemóveis em modo retrato.
  • Medium — classe para janelas de 600–840 dp, características de tablets em retrato e telemóveis em paisagem.
  • Expanded — classe para janelas largas a partir de 840 dp, encontradas em tablets e desktop.
  • Material Design 3 usa Window Size Class como base para layout adaptativo.

O que é Window Size Class?

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.

Três classes de tamanho de janela no Android

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.

Como funciona o Window Size Class

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.

kotlin
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.

Window Size Class no Jetpack Compose

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.

kotlin
@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.

Window Size Class e Material Design 3

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.

ClasseComponente de navegaçãoPane Scaffold
CompactBottom NavigationPainel oculto
MediumNavigation RailPainel deslizante
ExpandedNavigation DrawerPainel permanente

Vantagens dos layouts adaptativos

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

Como o Window Size Class difere do Screen Size Buckets?

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.

É necessário suportar Window Size Class no Android 6 e versões anteriores?

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.

Como o Window Size Class funciona em dispositivos dobráveis?

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.

Pode-se usar Window Size Class em layout XML (Views)?

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.

Quais limites são usados para WindowHeightSizeClass?

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

  • Window Size Class — API do Jetpack WindowManager para categorizar a largura da janela em Compact, Medium e Expanded.
  • Compact — até 600 dp, interface de uma coluna, Bottom Navigation.
  • Medium — 600–840 dp, interface de duas colunas, Navigation Rail.
  • Expanded — a partir de 840 dp, interface multipainel, Navigation Drawer.
  • Jetpack Compose — função currentWindowAdaptiveInfo() para obter a classe em tempo de execução.
  • Material Design 3 — componentes adaptativos reagem automaticamente ao Window Size Class.
  • Conclusão — Window Size Class substitui a adaptação tradicional baseada em breakpoints e torna as interfaces previsíveis em todos os dispositivos.

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.

Discutir o projeto

Leia também