Supporta il windowing del desktop

Il windowing su desktop consente agli utenti di eseguire più app contemporaneamente in finestre delle app ridimensionabili per un'esperienza versatile, simile a quella di un computer.

Nella figura 1 puoi vedere l'organizzazione della schermata con la funzionalità di gestione delle finestre del desktop attivata. Aspetti importanti:

  • Gli utenti possono eseguire più app contemporaneamente affiancate.
  • La barra delle app è in posizione fissa nella parte inferiore del display e mostra le app in esecuzione. Gli utenti possono bloccare le app per accedervi rapidamente.
  • Una nuova barra di intestazione personalizzabile decora la parte superiore di ogni finestra con controlli quali riduci a icona e ingrandisci.
Figura 1. Finestre del desktop su un tablet.

Per impostazione predefinita, le app si aprono a schermo intero sui tablet Android. Per avviare un'app in modalità finestra del desktop, tieni premuto il cursore della finestra nella parte superiore dello schermo e trascinalo all'interno dell'interfaccia utente, come mostrato nella figura 2.

Quando un'app è aperta in modalità finestra del computer, anche altre app si aprono in finestre del computer.

Figura 2. Tieni premuto il riquadro della finestra dell'app e trascinalo per attivare la modalità finestra del desktop.

Gli utenti possono anche richiamare il windowing sul desktop dal menu visualizzato sotto l'handle della finestra quando tocchi o fai clic sul punto di manipolazione o utilizza la scorciatoia da tastiera tasto Meta (Windows, Comando o Ricerca) + Ctrl + Giù.

Gli utenti escono dalla finestra del desktop chiudendo tutte le finestre attive o afferrando la maniglia della finestra nella parte superiore di una finestra del desktop e trascinando l'app nella parte superiore dello schermo. La scorciatoia da tastiera Meta + H consente inoltre di uscire dalla modalità finestra del desktop e di eseguire di nuovo le app a schermo intero.

Per tornare alla visualizzazione delle finestre del computer, tocca o fai clic sul riquadro Spazio desktop nella schermata Recenti.

Ridimensionamento e modalità di compatibilità

Nelle finestre del computer, le app con l'orientamento bloccato sono ridimensionabili liberamente. Ciò significa che anche se un'attività è bloccata sull'orientamento verticale, gli utenti possono comunque ridimensionare l'app in una finestra con orientamento orizzontale.

Figura 3. Ridimensionamento della finestra di un'app con limitazioni in modalità Ritratto in orizzontale.

La UI delle app dichiarate non ridimensionabili (ovvero resizeableActivity = false) viene ridimensionata, mantenendo le stesse proporzioni.

Figura 4. L'interfaccia utente di un'app non ridimensionabile si adatta al ridimensionamento della finestra.

Le app di fotocamera che bloccano l'orientamento o sono dichiarate non ridimensionabili hanno un trattamento speciale per i mirini della fotocamera: la finestra è completamente ridimensionabile, ma il mirino mantiene le stesse proporzioni. Se le app vengono sempre eseguite in verticale o orizzontale, le app vengono codificate come hardcoded o comunque suppongono errori di calcolo dell'anteprima o dell'orientamento o delle proporzioni dell'immagine acquisita, con conseguenti immagini allungate, ruotate o capovolte.

Fino a quando le app non saranno pronte a implementare i mirini della fotocamera completamente responsivi, il trattamento speciale offre un'esperienza utente più di base che riduce gli effetti causati da presupposti errati.

Per scoprire di più sulla modalità di compatibilità per le app di fotocamera, consulta Modalità di compatibilità del dispositivo.

Figura 5. Il mirino della fotocamera mantiene le proporzioni durante il ridimensionamento della finestra.

Intestazioni rientrate personalizzabili

Tutte le app in esecuzione in una finestra del desktop hanno una barra delle intestazioni, anche in modalità immersiva.
Assicurati che i contenuti dell'app non siano oscurati dalla barra della barra. La barra delle intestazioni è un tipo di barra delle intestazioni incassata: androidx.compose.foundation.layout.WindowInsets.Companion.captionBar(); nelle visualizzazioni, WindowInsets.Type.captionBar(), che fa parte delle barre di sistema.

Puoi scoprire di più sulla gestione dei riquadri in Visualizzare i contenuti edge-to-edge nell'app e i riquadri delle finestre in Compose.

Anche la barra delle intestazioni è personalizzabile. Android 15 ha introdotto il tipo di aspetto APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND per rendere la barra delle intestazioni trasparente e consentire alle app di disegnare contenuti personalizzati al suo interno.

Le app diventano quindi responsabili di definire lo stile della parte superiore dei loro contenuti in modo che assomigli alla barra dei sottotitoli (sfondo, contenuti personalizzati e così via), a eccezione degli elementi dei sottotitoli codificati di sistema (pulsanti di chiusura e ingrandimento), che sono tracciati dal sistema nella barra dei sottotitoli trasparente nella parte superiore dell'app.

Le app possono attivare/disattivare l'aspetto degli elementi di sistema all'interno della didascalia per i temi chiaro e scuro utilizzando APPEARANCE_LIGHT_CAPTION_BARS, in modo simile all'attivazione/disattivazione della barra di stato e della barra di navigazione.

Android 15 ha anche introdotto il metodo WindowInsets#getBoundingRects() che consente alle app di eseguire l'introspezione degli inserti della barra dei sottotitoli codificati in modo più dettagliato. Le app possono distinguere tra aree in cui il sistema disegna elementi di sistema e aree inutilizzate in cui le app possono inserire contenuti personalizzati senza sovrapporre elementi di sistema.

L'elenco di oggetti Rect restituito dall'API indica le regioni di sistema che devono essere evitate. L'eventuale spazio rimanente (calcolato sottraendo i rettangoli dai riquadri della barra dei sottotitoli codificati) è il posto in cui l'app può disegnare senza gli elementi di sistema sovrapposti e con la possibilità di ricevere input.

Chrome prima e dopo l'implementazione delle intestazioni personalizzate.
Figura 6. Chrome prima e dopo l'implementazione delle intestazioni personalizzate.

Supporto di multitasking e istanze multiple

Il multitasking è alla base delle finestre dei computer e consentire più istanze della tua app può aumentare notevolmente la produttività degli utenti.

Android 15 introduce PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI, che le app possono impostare per specificare che l'interfaccia utente di sistema deve essere mostrata per consentire all'app di essere avviata come più istanze.

Gestisci le istanze delle app con i gesti di trascinamento

In modalità multi-finestra, gli utenti possono avviare una nuova istanza dell'app trascinando un elemento della visualizzazione fuori dalla finestra dell'app. Gli utenti possono anche spostare elementi tra istanze della stessa app.

Figura 7. Avvia una nuova istanza di Chrome trascinando una scheda fuori dalla finestra del desktop.

Android 15 introduce due flag per personalizzare il comportamento del trascinamento:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG: indica che un trascinamento non gestito deve essere delegato al sistema per essere avviato se nessuna finestra visibile gestisce il rilascio. Quando utilizzi questo flag, il chiamante deve fornire a ClipData un Item che contiene un elemento IntentSender immutabile a un'attività da avviare (vedi ClipData.Item.Builder#setIntentSender()). Il sistema può avviare o meno l'intent in base a fattori quali le dimensioni dello schermo o la modalità windowing corrente. Se il sistema non avvia l'intent, l'intent viene annullato tramite il normale flusso di trascinamento.

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION: indica che un'operazione di trascinamento può oltrepassare i limiti della finestra (per più istanze della stessa applicazione).

    Quando il flag startDragAndDrop() viene chiamato con questo flag impostato, solo le finestre visibili appartenenti alla stessa applicazione possono partecipare all'operazione di trascinamento e ricevere i contenuti trascinati.

Figura 8. Spostare una scheda tra due istanze dell'app Chrome.

Altre ottimizzazioni

Personalizza i lanci delle app e trasferisci le app dal windowing del desktop a schermo intero.

Specifica le dimensioni e la posizione predefinite

Non tutte le app, anche se ridimensionabili, richiedono una finestra grande per offrire valore all'utente. Puoi utilizzare il metodo ActivityOptions#setLaunchBounds() per specificare le dimensioni e la posizione predefinite quando viene avviata un'attività.

Attivare lo schermo intero dallo spazio del desktop

Le app possono passare a schermo intero chiamando Activity#requestFullScreenMode(). Il metodo mostra l'app a schermo intero direttamente dalla finestra del desktop.