Cosa fare e cosa fare adattivi

Le app adattive supportano display di tutte le dimensioni: l'intero schermo del dispositivo, finestre ridimensionabili in modalità multi-finestra, orientamento verticale e orizzontale, display piegati e aperti dei dispositivi pieghevoli.

Un breve elenco di impostazioni di configurazione e API ti consente di creare app adattive. Tuttavia, alcune impostazioni e API obsolete non sono compatibili con le app adattive e devono essere evitate.

Ridimensionabilità

Le app adattive supportano il ridimensionamento delle app e la modalità multi-finestra.

L'attributo resizeableActivity degli elementi manifest <activity> e <application> attiva o disattiva la modalità multi-finestra su Android 11 (livello API 30) e versioni precedenti. Su Android 12 (livello API 31) e versioni successive, gli schermi di grandi dimensioni supportano la modalità multi-finestra indipendentemente dall'attributo. Per saperne di più, vedi Supportare la modalità multi-finestra.

✓ Azione consigliata

Consenti alla tua app di partecipare a scenari di multitasking e multi-finestra per aumentare la produttività e la soddisfazione degli utenti.

Imposta resizeableActivity="true" se la tua app ha come target livelli API inferiori a 24; altrimenti, non preoccuparti: è true per impostazione predefinita su Android 7.0 (livello API 24) e versioni successive.

✗ Non

Non impostare resizeableActivity="false" per nessun livello API. Non escludere la tua app dai casi d'uso che prevedono la modalità multi-finestra.

Orientamento

Le app adattive supportano l'orientamento verticale e orizzontale indipendentemente dalle dimensioni del display o dalla modalità finestra.

L'impostazione del manifest screenOrientation limita l'orientamento dell'attività.

✓ Azione consigliata

Elimina l'impostazione screenOrientation dal file manifest dell'app.

Il blocco dell'orientamento delle app non impedisce le modifiche alle dimensioni della finestra. Le app vengono ridimensionate quando entrano in modalità multi-finestra, quando un dispositivo viene piegato o aperto o quando viene ridimensionata una finestra di tipo desktop. La tua app deve supportare le modifiche alle dimensioni della finestra indipendentemente dall'impostazione dell'attributo screenOrientation.

✗ Non

Non limitare l'orientamento dell'attività. Le app che bloccano l'orientamento vengono visualizzate con barre nere sui dispositivi con schermi grandi e dimensioni delle finestre incompatibili.

Le app con letterbox sono soggette a una minore rilevabilità su Google Play per tablet, dispositivi pieghevoli e ChromeOS.

Proporzioni

Poiché le dimensioni dello schermo e della finestra variano, variano anche le proporzioni, da alte e strette a quadrate, a basse e larghe.

Le impostazioni del manifest minAspectRatio e maxAspectRatio limitano le proporzioni dell'app a valori hardcoded.

✓ Azione consigliata

Adatta la tua app allo schermo indipendentemente dalle dimensioni relative.

Elimina le impostazioni minAspectRatio e maxAspectRatio dal file manifest dell'app. In alternativa, assicurati che la tua app sia ridimensionabile e che le proporzioni si adattino automaticamente (vedi la sezione Ridimensionamento).

✗ Non

Non tentare di controllare le dimensioni relative dell'app. Se l'app viene eseguita su uno schermo o in una finestra con proporzioni incompatibili con quelle dell'app, viene visualizzata con barre nere.

Su Android 14 (livello API 34) e versioni successive, gli utenti possono ignorare le proporzioni dell'app per espandere le app in formato letterbox in modo che riempiano l'area di visualizzazione disponibile. Consulta la sezione Modalità di compatibilità del dispositivo.

Dimensione finestra

L'ottimizzazione dei layout per diverse dimensioni di visualizzazione è la premessa fondamentale del design adattivo. Le app adattive si concentrano sulle dimensioni della finestra dell'app anziché sulle dimensioni dello schermo del dispositivo. Quando l'app è a schermo intero, la finestra dell'app è lo schermo del dispositivo.

Le classi di dimensioni della finestra forniscono un modo sistematico per determinare e classificare le dimensioni della finestra dell'app. Adatta la tua app modificando i layout in base al cambiamento della classe di dimensioni della finestra dell'app.

✓ Azione consigliata

Valuta le dimensioni della finestra dell'app in base alle classi di dimensioni della finestra.

Per determinare la classe di dimensioni della finestra, utilizza la funzione di primo livello currentWindowAdaptiveInfoV2() della libreria Compose Material 3 Adaptive (che sostituisce la funzione currentWindowAdaptiveInfo() ritirata). Per saperne di più, consulta Creare app adattive.

✗ Non

Non ignorare l'utilità delle definizioni delle classi di dimensioni della finestra e delle API integrate. Non utilizzare API ritirate per calcolare le dimensioni della finestra.

API deprecate

Le API della piattaforma precedenti non misurano correttamente la finestra dell'app; alcune misurano lo schermo del dispositivo, altre escludono la decorazione del sistema.

✓ Azione consigliata

Utilizza WindowManager#getCurrentWindowMetrics() e WindowMetrics#getBounds() per ottenere le dimensioni della finestra dell'app. Utilizza WindowMetrics#getDensity() per ottenere la densità di visualizzazione.

✗ Non

Non utilizzare le seguenti API Display ritirate per determinare le dimensioni della finestra:

Scrivi

Jetpack Compose è progettato per lo sviluppo di UI adattive. Nessun file XML, nessun file di layout, nessun qualificatore di risorse. Solo composable stateless basati su Kotlin come Column, Row e Box che descrivono la tua UI e modificatori come offset, padding e size che aggiungono comportamento agli elementi della UI.

✓ Azione consigliata

Crea con Compose. Non perderti le ultime funzionalità e uscite.

✗ Non

Non fare affidamento su tecnologie obsolete. Non lasciare che la tua app diventi obsoleta.

Libreria adattiva Compose Material 3

La libreria Compose Material 3 Adaptive fornisce componenti e API che facilitano lo sviluppo di app adattive.

✓ Azione consigliata

Utilizza le seguenti API per rendere la tua app adattiva:

  • NavigationSuiteScaffold: passa dalla barra di navigazione alla barra di navigazione laterale a seconda delle dimensioni della finestra dell'app.
  • ListDetailPaneScaffold: implementa il layout canonico list-detail. Adatta il layout alle dimensioni della finestra dell'app.
  • SupportingPaneScaffold: implementa il layout canonico del riquadro di supporto.
✗ Non

Non reinventare la ruota. Non perdere i vantaggi in termini di produttività degli sviluppatori offerti da tutte le librerie Jetpack Compose.

Layout

Gli utenti si aspettano che le app sfruttino al meglio lo spazio di visualizzazione disponibile con contenuti supplementari o controlli avanzati.

Le app adattive ottimizzano i layout in base alle modifiche alla visualizzazione, in particolare, alle modifiche alle dimensioni della finestra dell'app o alla postura del dispositivo.

✓ Azione consigliata

Modifica i componenti dell'interfaccia utente man mano che le dimensioni della finestra cambiano per sfruttare lo spazio di visualizzazione disponibile. Ad esempio, scambia la barra di navigazione inferiore utilizzata nelle dimensioni delle finestre compatte con una barra di navigazione verticale nelle finestre medie ed estese. Riposiziona le finestre di dialogo in modo che siano raggiungibili su tutti i display.

Organizza i contenuti in riquadri per attivare layout a più riquadri come elenco-dettagli e riquadro di supporto per la visualizzazione dinamica dei contenuti.

✓ Azione consigliata: elenca e descrivi in dettaglio le attività organizzate in un layout a due riquadri.
✗ Non

Se non utilizzi i riquadri dei contenuti, non limitarti a estendere gli elementi dell'interfaccia utente per riempire lo spazio di visualizzazione disponibile. Le righe di testo lunghe sono difficili da leggere. I pulsanti allungati sembrano progettati male. Se utilizzi Modifier.fillMaxWidth, non presupporre che sia il comportamento corretto per tutte le dimensioni del display.

✗ Non: layout allungato per riempire la finestra in espansione.

Dispositivi di immissione

Gli utenti non utilizzano solo i touchscreen per interagire con le app.

Le app adattive supportano tastiere, mouse e stili esterni per offrire un'esperienza utente migliorata e aiutare gli utenti a essere più produttivi su fattori di forma di ogni tipo.

✓ Azione consigliata

Sfrutta la funzionalità integrata del framework Android per la navigazione con i tasti della tastiera e il clic, la selezione e lo scorrimento con mouse o trackpad. Pubblica le scorciatoie da tastiera della tua app in Guida alle scorciatoie da tastiera.

Utilizza la libreria Material 3 di Jetpack per consentire agli utenti di scrivere in qualsiasi componente TextField utilizzando uno stilo.

✗ Non

Non rendere impossibili metodi di input alternativi. Non introdurre problemi di accessibilità.

Riepilogo

  • Crea la tua app con Compose e la libreria adattiva Material 3
  • Basare i layout sulle classi di dimensioni della finestra
  • Creare layout a più riquadri
  • Rendere ridimensionabile l'app
  • Non bloccare mai l'orientamento dell'attività
  • Non limitare le proporzioni
  • Supporta input diversi dal tocco
  • Evitare le API ritirate

✓ Fai ciò che si aspettano i tuoi utenti: ottimizza la tua app per la diversità dei dispositivi su cui le persone fanno affidamento ogni giorno.

✗ Non aspettare. Inizia oggi stesso.