Informazioni sugli inserti delle finestre

La piattaforma Android è responsabile del disegno dell'interfaccia utente di sistema, come la barra di stato e la barra di navigazione. Questa UI di sistema viene visualizzata indipendentemente dall'app in uso dall'utente.

WindowInsets fornisce informazioni sull'UI di sistema per assicurarti che l'app venga disegnata nell'area corretta e che la tua UI non sia oscurata dall'UI di sistema.

Disegnare da un bordo all'altro per disegnare dietro le barre di sistema
Figura 1. Da un bordo all'altro per disegnare dietro le barre di sistema.

Su Android 14 (livello API 34) e versioni precedenti, l'interfaccia utente dell'app non viene disegnata sotto le barre di sistema e i ritagli dello schermo per impostazione predefinita.

Su Android 15 (livello API 35) e versioni successive, l'app viene disegnata sotto le barre di sistema e mostra i ritagli quando ha come target l'SDK 35. Ciò si traduce in un'esperienza utente più fluida e consente alla tua app di sfruttare al meglio lo spazio della finestra a sua disposizione.

La visualizzazione dei contenuti dietro l'interfaccia utente di sistema è chiamata passaggio a schermo intero. In questa pagina scoprirai i diversi tipi di inserimenti, come passare da un'app a schermo intero e come utilizzare le API di inserimenti per animare l'interfaccia utente e assicurarti che i contenuti dell'app non vengano oscurati dagli elementi dell'interfaccia utente di sistema.

Nozioni di base sugli intarsi

Quando un'app è a schermo intero, devi assicurarti che le interazioni e i contenuti importanti non siano oscurati dall'interfaccia utente di sistema. Ad esempio, se un pulsante è collocato dietro la barra di navigazione, l'utente potrebbe non essere in grado di fare clic su di esso.

Le dimensioni dell'interfaccia utente di sistema e le informazioni sulla posizione sono specificate tramite insiemi di elementi.

Ogni parte dell'interfaccia utente di sistema ha un tipo di insenatura corrispondente che descrive le sue dimensioni e la sua posizione. Ad esempio, gli inserti della barra di stato forniscono le dimensioni e la posizione della barra di stato, mentre gli inserti della barra di navigazione forniscono le dimensioni e la posizione della barra di navigazione. Ogni tipo di insenatura è costituito da quattro dimensioni in pixel: superiore, sinistra, destra e inferiore. Queste dimensioni specificano quanto si estende l'interfaccia utente di sistema dai lati corrispondenti della finestra dell'app. Per evitare sovrapposizioni con questo tipo di UI di sistema, l'UI dell'app deve essere incassata per quell'importo.

Questi tipi di intestazioni Android integrate sono disponibili tramite WindowInsets:

WindowInsets.statusBars

Gli inserti che descrivono le barre di stato. Si tratta delle barre dell'interfaccia utente di sistema nella parte superiore che contengono icone di notifica e altri indicatori.

WindowInsets.statusBarsIgnoringVisibility

La barra di stato si inserisce quando sono visibili. Se al momento le barre di stato sono nascoste (a causa dell'attivazione della modalità a schermo intero immersiva), gli inserti della barra di stato principale saranno vuoti, ma non saranno vuoti.

WindowInsets.navigationBars

Gli inserti che descrivono le barre di navigazione. Si tratta delle barre dell'interfaccia utente di sistema sul lato sinistro, destro o inferiore del dispositivo, che descrivono le icone della barra delle app o di navigazione. Questi possono cambiare in fase di esecuzione in base al metodo di navigazione preferito dall'utente e all'interazione con la barra delle app.

WindowInsets.navigationBarsIgnoringVisibility

La barra di navigazione si inserisce quando è visibile. Se le barre di navigazione sono attualmente nascoste (a causa dell'attivazione della modalità a schermo intero immersiva), gli inserti della barra di navigazione principale saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.captionBar

L'inserimento che descrive la decorazione della finestra dell'interfaccia utente di sistema se si trova in una finestra di forma libera, ad esempio la barra del titolo superiore.

WindowInsets.captionBarIgnoringVisibility

La barra dei sottotitoli codificati si inserisce quando sono visibili. Se le barre dei sottotitoli codificati sono attualmente nascoste, gli inserti della barra dei sottotitoli codificati principali saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.systemBars

L'unione degli inserti della barra di sistema, che include le barre di stato, le barre di navigazione e la barra delle scritte.

WindowInsets.systemBarsIgnoringVisibility

La barra di sistema si inserisce quando è visibile. Se le barre di sistema sono attualmente nascoste (a causa dell'attivazione della modalità a schermo intero immersiva), gli inserti della barra di sistema principale saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.ime

Gli inserti che descrivono lo spazio occupato dalla tastiera software nella parte inferiore.

WindowInsets.imeAnimationSource

Gli inserti che descrivono lo spazio occupato dalla tastiera software prima dell'animazione della tastiera corrente.

WindowInsets.imeAnimationTarget

Gli inserti che descrivono lo spazio che la tastiera software occuperà dopo l'animazione corrente della tastiera.

WindowInsets.tappableElement

Un tipo di intestazioni che descrivono informazioni più dettagliate sull'interfaccia utente di navigazione, indicando la quantità di spazio in cui i "tocchi" verranno gestiti dal sistema e non dall'app. Per le barre di navigazione trasparenti con navigazione tramite gesti, alcuni elementi dell'app possono essere toccati tramite l'interfaccia utente di navigazione del sistema.

WindowInsets.tappableElementIgnoringVisibility

Gli elementi toccabili rientrano quando sono visibili. Se gli elementi toccabili sono attualmente nascosti (a causa dell'attivazione della modalità a schermo intero immersiva), gli inserti dell'elemento toccabile principale saranno vuoti, ma non vuoti.

WindowInsets.systemGestures

Gli inserti che rappresentano la quantità di inserti in cui il sistema intercetta i gesti per la navigazione. Le app possono specificare manualmente la gestione di un numero limitato di questi gesti tramite Modifier.systemGestureExclusion.

WindowInsets.mandatorySystemGestures

Un sottoinsieme di gesti di sistema che verranno sempre gestiti dal sistema e che non possono essere disattivati tramite Modifier.systemGestureExclusion.

WindowInsets.displayCutout

Gli inserti che rappresentano la quantità di spaziatura necessaria per evitare la sovrapposizione con un ritaglio del display (tacca o foro).

WindowInsets.waterfall

Gli inserti che rappresentano le aree curve di un grafico a cascata. Un display a cascata presenta aree curve lungo i bordi dello schermo, dove lo schermo inizia a avvolgersi lungo i lati del dispositivo.

Questi tipi sono riassunti in tre tipi di intestazioni "sicure" che assicurano che i contenuti non vengano nascosti:

Questi tipi di intestazioni "sicure" proteggono i contenuti in modi diversi, in base agli intestazioni della piattaforma di base:

  • Utilizza WindowInsets.safeDrawing per proteggere i contenuti che non devono essere disegnati sotto l'interfaccia utente di sistema. Questo è l'utilizzo più comune degli inserti: per evitare di disegnare contenuti oscurati dall'interfaccia utente di sistema (parzialmente o completamente).
  • Usa WindowInsets.safeGestures per proteggere i contenuti con i gesti. In questo modo, si evitano conflitti tra i gesti di sistema e quelli delle app (ad esempio quelli per i riquadri inferiori, i caroselli o nei giochi).
  • Utilizza WindowInsets.safeContent come combinazione di WindowInsets.safeDrawing e WindowInsets.safeGestures per assicurarti che i contenuti non abbiano sovrapposizioni visive e di gesti.