Informazioni sugli inserti delle finestre

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

WindowInsets fornisce informazioni sulla UI di sistema per garantire che l'app venga disegnata nell'area corretta e che la UI non venga oscurata dalla UI di sistema.

Utilizzo della modalità edge-to-edge per disegnare dietro le barre di sistema
Figura 1. Going edge-to-edge to draw behind the system bars.

Su Android 14 (livello API 34) e versioni precedenti, per impostazione predefinita la UI della tua app non viene disegnata sotto le barre di sistema e i ritagli display.

Su Android 15 (livello API 35) e versioni successive, l'app viene visualizzata sotto le barre di sistema e i ritagli display quando l'app ha come target l'SDK 35. In questo modo, l'esperienza utente è più fluida e la tua app può sfruttare appieno lo spazio della finestra a sua disposizione.

La visualizzazione dei contenuti dietro la UI di sistema è chiamata edge-to-edge. In questa pagina scoprirai i diversi tipi di inset, come passare alla modalità edge-to-edge e come utilizzare le API inset per animare la UI e assicurarti che i contenuti dell'app non siano oscurati dagli elementi UI di sistema.

Nozioni di base sugli inserti

Quando un'app viene visualizzata edge-to-edge, devi assicurarti che i contenuti e le interazioni importanti non siano oscurati dalla UI di sistema. Ad esempio, se un pulsante è posizionato dietro la barra di navigazione, l'utente potrebbe non essere in grado di fare clic.

Le dimensioni della UI di sistema e le informazioni sulla sua posizione vengono specificate utilizzando gli inset.

Ogni parte della UI di sistema ha un tipo di inset corrispondente che ne descrive le dimensioni e la posizione. Ad esempio, gli inset della barra di stato forniscono le dimensioni e la posizione della barra di stato, mentre gli inset della barra di navigazione forniscono le dimensioni e la posizione della barra di navigazione. Ogni tipo di riquadro è costituito da quattro dimensioni in pixel: superiore, sinistra, destra e inferiore. Queste dimensioni specificano l'estensione dell'UI 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 inserita di questa quantità.

Questi tipi di inset Android integrati sono disponibili tramite WindowInsets:

WindowInsets.statusBars

Gli inset che descrivono le barre di stato. Si tratta delle barre della UI di sistema in alto contenenti le icone di notifica e altri indicatori.

WindowInsets.statusBarsIgnoringVisibility

Gli inserti della barra di stato quando sono visibili. Se le barre di stato sono nascoste (perché è stata attivata la modalità a schermo intero immersiva), gli inserti della barra di stato principale saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.navigationBars

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

WindowInsets.navigationBarsIgnoringVisibility

Gli inserti della barra di navigazione quando sono visibili. Se le barre di navigazione sono nascoste (perché è stata attivata la modalità a schermo intero immersiva), gli inserti della barra di navigazione principale saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.captionBar

L'inset che descrive la decorazione della finestra della UI di sistema se si trova in una finestra in formato libero, come la barra del titolo in alto.

WindowInsets.captionBarIgnoringVisibility

Gli inserti della barra dei sottotitoli codificati quando sono visibili. Se le barre dei sottotitoli sono nascoste, gli inserti della barra dei sottotitoli principale saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.systemBars

L'unione degli inset della barra di sistema, che includono le barre di stato, le barre di navigazione e la barra del titolo.

WindowInsets.systemBarsIgnoringVisibility

Gli inset della barra di sistema quando sono visibili. Se le barre di sistema sono nascoste (perché è stata attivata la modalità immersiva a schermo intero), gli inset della barra di sistema principale saranno vuoti, ma questi inset non saranno vuoti.

WindowInsets.ime

Gli inserti che descrivono la quantità di spazio nella parte inferiore occupata dalla tastiera su schermo.

WindowInsets.imeAnimationSource

Gli inset che descrivono la quantità di spazio occupata dalla tastiera su schermo prima dell'animazione della tastiera corrente.

WindowInsets.imeAnimationTarget

Gli inset che descrivono la quantità di spazio che la tastiera su schermo occuperà dopo l'animazione della tastiera corrente.

WindowInsets.tappableElement

Un tipo di inset che descrive informazioni più dettagliate sulla UI di navigazione, fornendo la quantità di spazio in cui i "tocchi" verranno gestiti dal sistema e non dall'app. Per le barre di navigazione trasparenti con la navigazione tramite gesti, alcuni elementi dell'app possono essere toccabili tramite la UI di navigazione del sistema.

WindowInsets.tappableElementIgnoringVisibility

Gli inserti degli elementi toccabili quando sono visibili. Se gli elementi toccabili sono nascosti (perché è stata attivata la modalità a schermo intero immersiva), gli inserti degli elementi toccabili principali saranno vuoti, ma questi inserti non saranno vuoti.

WindowInsets.systemGestures

Gli inserti che rappresentano la quantità di inserti in cui il sistema intercetterà i gesti per la navigazione. Le app possono specificare manualmente la gestione di una quantità limitata di questi gesti utilizzando Modifier.systemGestureExclusion.

WindowInsets.mandatorySystemGestures

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

WindowInsets.displayCutout

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

WindowInsets.waterfall

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

Questi tipi sono riassunti da tre tipi di inset "sicuri" che garantiscono che i contenuti non vengano oscurati:

Questi tipi di inset "sicuri" proteggono i contenuti in modi diversi, in base agli inset della piattaforma sottostante:

  • Utilizza WindowInsets.safeDrawing per proteggere i contenuti che non devono essere visualizzati sotto l'interfaccia utente di sistema. Questo è l'utilizzo più comune degli inset: impedire il disegno di contenuti oscurati dalla UI di sistema (parzialmente o completamente).
  • Utilizza WindowInsets.safeGestures per proteggere i contenuti con i gesti. In questo modo, i gesti di sistema non entrano in conflitto con i gesti dell'app (ad esempio quelli per i riquadri inferiori, i caroselli o i giochi).
  • Utilizza WindowInsets.safeContent come combinazione di WindowInsets.safeDrawing e WindowInsets.safeGestures per assicurarti che i contenuti non abbiano sovrapposizioni visive e di gesti.