Classi di finestra

Le classi di dimensioni delle finestre sono un insieme di punti di interruzione dell'area visibile guidati che ti aiutano progettare, sviluppare e testare layout reattivi/adattivi. Il saldo dei punti di interruzione un layout semplice e la flessibilità di ottimizzare la tua app per casi unici.

Le classi di dimensioni delle finestre classificano l'area di visualizzazione disponibile per la tua app come compact, medium o Expanded. La larghezza e l'altezza disponibili sono classificate separatamente, in modo che in qualsiasi momento l'app abbia due dimensioni di finestra una per la larghezza, una per l'altezza. La larghezza disponibile è in genere superiore importante rispetto all'altezza disponibile a causa dell'ubiquità dello scorrimento verticale, quindi la classe di dimensioni della finestra della larghezza è probabilmente più pertinente all'interfaccia utente dell'app.

Figura 1. Rappresentazioni delle classi di dimensioni delle finestre basate sulla larghezza.
di Gemini Advanced.
Figura 2. Rappresentazioni delle classi di dimensioni delle finestre basate sull'altezza.

Come mostrato nelle figure, i punti di interruzione consentono di continuare a pensare sui layout in termini di dispositivi e configurazioni. Punto di interruzione della classe di ogni dimensione nella maggior parte dei casi gli scenari tipici dei dispositivi, il che può essere utile quando rifletti sulla progettazione di un sistema basato su punti di interruzione layout.

Classe dimensioni Punto di interruzione Rappresentazione del dispositivo
Larghezza compatta larghezza < 600dp 99,96% dei telefoni in verticale
Larghezza media 600 dp ≤ larghezza < 840dp il 93,73% dei tablet in verticale,

la maggior parte dei display interni aperti in verticale

Larghezza espansa larghezza ≥ 840 dp il 97,22% dei tablet in orizzontale

la maggior parte degli schermi interni più grandi in orizzontale

Altezza compatta altezza < 480dp 99,78% dei telefoni in orizzontale
Altezza media 480 dp ≤ altezza < 900dp il 96,56% dei tablet in orizzontale

97,59% dei telefoni in verticale

Altezza espansa altezza ≥ 900 dp 94,25% dei tablet in verticale

Sebbene possa essere utile visualizzare le classi di dimensioni come dispositivi fisici, le dimensioni della finestra sono esplicitamente non determinate dalle dimensioni dello schermo del dispositivo. Finestra le classi di dimensioni non sono destinate alla logica di tipo isTablet. Piuttosto, finestra Le classi di dimensioni sono determinate dalle dimensioni della finestra disponibile per l'applicazione a prescindere dal tipo di dispositivo su cui è in esecuzione l'app, per cui sono importanti implicazioni:

  • I dispositivi fisici non garantiscono una classe specifica di dimensioni delle finestre. La lo spazio disponibile sullo schermo dell'app può essere diverso dalle dimensioni dello schermo dispositivo per molti motivi. Sui dispositivi mobili, la modalità schermo diviso può lo schermo tra due applicazioni. Su ChromeOS, le app per Android essere presentati in finestre in formato libero ridimensionabili arbitrariamente. I pieghevoli possono avere due schermi di diverse dimensioni accessibili singolarmente piegando o aprendo il dispositivo.

  • La classe delle dimensioni della finestra può cambiare per tutta la durata dell'app. Mentre l'app è in esecuzione, l'orientamento del dispositivo cambia, il multitasking e La capacità di piegatura o apertura può influire sulla quantità di spazio disponibile sullo schermo. Come come risultato, la classe delle dimensioni della finestra è dinamica e l'interfaccia utente dell'app deve adattarsi di conseguenza.

Le classi di dimensioni delle finestre vengono mappate ai punti di interruzione compatti, medi ed espansi nella Layout Material Design assistenza. Usa le classi di dimensioni delle finestre per prendere decisioni di alto livello sul layout delle applicazioni, ad esempio decidere se utilizzare un layout canonico specifico per sfruttare spazio aggiuntivo sullo schermo.

Calcola l'attuale WindowSizeClass utilizzando currentWindowAdaptiveInfo() funzione di primo livello della androidx.compose.material3.adaptive. La funzione restituisce un istanza di WindowAdaptiveInfo, che contiene windowSizeClass. La l'esempio seguente mostra come calcolare la classe delle dimensioni della finestra e ricevere si aggiorna ogni volta che la classe delle dimensioni della finestra cambia:

val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass

Gestire i layout con classi di dimensioni delle finestre

Le classi di dimensioni delle finestre consentono di modificare il layout dell'app come spazio di visualizzazione disponibili per le modifiche alla tua app, ad esempio, quando un dispositivo si piega o si apre, l'orientamento del dispositivo cambia o la finestra dell'app viene ridimensionata in modalità multi-finestra .

Localizza la logica per la gestione delle modifiche alle dimensioni del display trasmettendo le dimensioni della finestra per passare a componibili nidificati come qualsiasi altro stato dell'app:

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Composable
fun MyApp(
    windowSizeClass: WindowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
) {
    // Perform logic on the size class to decide whether to show the top app bar.
    val showTopAppBar = windowSizeClass.windowHeightSizeClass != WindowHeightSizeClass.COMPACT

    // MyScreen knows nothing about window sizes, and performs logic based on a Boolean flag.
    MyScreen(
        showTopAppBar = showTopAppBar,
        /* ... */
    )
}

Classi di dimensioni della finestra di test

Quando apporti modifiche al layout, verificane il comportamento su tutte le dimensioni delle finestre soprattutto per larghezze compatte, medie ed espanse dei punti di interruzione.

Se hai già un layout per schermi compatti, ottimizzalo per la classe di larghezza espansa, poiché questa classe fornisce la maggior parte dello spazio per ulteriori modifiche all'interfaccia utente e ai contenuti. Decidi poi il layout adatto la classe di larghezza media; valuta la possibilità di aggiungere un layout specializzato.

Passaggi successivi

Per saperne di più su come utilizzare le classi di dimensioni delle finestre per creare modelli layout, consulta quanto segue:

Per scoprire cosa rende un'app ottimale su tutti i dispositivi e le dimensioni dello schermo, consulta: