Prepara l'app per le modifiche di ridimensionamento e orientamento in Android 17
Lettura di 6 minuti
Con il rilascio di Android 16 nel 2025, abbiamo condiviso la nostra visione di un ecosistema di dispositivi in cui le app si adattano perfettamente a qualsiasi schermo, che si tratti di uno smartphone, un pieghevole, un tablet, un computer desktop, un display dell'auto o un dispositivo XR. Gli utenti si aspettano che le loro app funzionino ovunque. Che si tratti di multitasking su un tablet, di aprire un dispositivo per leggere comodamente o di eseguire app in un ambiente di finestre desktop, gli utenti si aspettano che l'UI riempia lo spazio di visualizzazione disponibile e si adatti alla postura del dispositivo.
Abbiamo introdotto modifiche significative alle API di orientamento e ridimensionamento per facilitare il comportamento adattivo, fornendo al contempo una disattivazione temporanea per aiutarti a effettuare la transizione. Abbiamo già visto molti sviluppatori adattarsi con successo a questa transizione quando hanno scelto come target il livello API 36.
Ora, con il rilascio della versione beta di Android 17, passiamo alla fase successiva della nostra roadmap adattiva: Android 17 (livello API 37) rimuove la disattivazione per gli sviluppatori per le limitazioni di orientamento e ridimensionamento sui dispositivi con schermi grandi (sw > 600 dp). Quando scegli come target il livello API 37, la tua app deve essere in grado di adattarsi a una varietà di dimensioni del display.
Le modifiche al comportamento garantiscono che l'ecosistema Android offra un'esperienza coerente e di alta qualità su tutti i fattori di forma dei dispositivi.
Novità di Android 17
Le app che hanno come target Android 17 devono garantire la compatibilità con l'eliminazione graduale degli attributi del file manifest e delle API di runtime introdotte in Android 16. Sappiamo che per alcune app questa potrebbe essere una transizione importante, quindi in questo post del blog abbiamo incluso best practice e strumenti per aiutarti a evitare problemi comuni in un secondo momento.
Non sono state introdotte nuove modifiche da Android 16, ma la disattivazione per gli sviluppatori non è più possibile. Ti ricordiamo che quando la tua app è in esecuzione su uno schermo grande, dove schermo grande significa che la dimensione più piccola del display è maggiore o uguale a 600 dp, i seguenti attributi del file manifest e le seguenti API vengono ignorati:
Nota: come accennato in precedenza con Android 16, queste modifiche non si applicano agli schermi più piccoli di sw 600 dp o alle app classificate come giochi in base al flag android:appCategory.
| Attributi del file manifest/API | Valori ignorati |
| screenOrientation | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| setRequestedOrientation() | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| resizeableActivity | all |
| minAspectRatio | all |
| maxAspectRatio | all |
Inoltre, gli utenti mantengono il controllo. Nelle impostazioni delle proporzioni, gli utenti possono attivare esplicitamente il comportamento richiesto dall'app.
Prepara l'app
Le app dovranno supportare i layout orizzontali e verticali per le dimensioni del display nell'intera gamma di proporzioni in cui gli utenti possono scegliere di utilizzare le app, incluse le finestre ridimensionabili, poiché non sarà più possibile limitare le proporzioni e l'orientamento a verticale o orizzontale.
Testa l'app
Il primo passo è testare l'app con queste modifiche per assicurarti che funzioni correttamente su tutte le dimensioni del display.
Utilizza Android 17 Beta 1 con gli emulatori della serie Pixel Tablet e Pixel Fold in Android Studio e imposta targetSdkPreview = “CinnamonBun”. In alternativa, puoi utilizzare il framework di compatibilità delle app attivando il flag UNIVERSAL_RESIZABLE_BY_DEFAULT se la tua app non ha ancora come livello API target il livello 36.
Abbiamo strumenti aggiuntivi per garantire che i layout si adattino correttamente. Puoi eseguire automaticamente l'audit dell'UI e ricevere suggerimenti per renderla più adattiva con Compose UI Check e simulare caratteristiche specifiche del display nei test utilizzando DeviceConfigurationOverride.
Per le app che in passato hanno limitato l'orientamento e le proporzioni, in genere si verificano problemi con le anteprime della fotocamera distorte o con orientamento errato, layout allungati, pulsanti inaccessibili o perdita dello stato dell'utente durante la gestione delle modifiche alla configurazione.
Diamo un'occhiata ad alcune strategie per risolvere questi problemi comuni.
Garantisci la compatibilità della fotocamera
Un problema comune sui pieghevoli orizzontali o per i calcoli delle proporzioni in scenari come multi-finestra, finestre desktop o display collegati è quando l'anteprima della fotocamera appare allungata, ruotata o ritagliata.
Assicurati che l'anteprima della fotocamera non sia allungata o ruotata.
Questo problema si verifica spesso sui dispositivi con schermi grandi e pieghevoli perché le app presuppongono relazioni fisse tra le funzionalità della fotocamera (come le proporzioni e l'orientamento del sensore) e le funzionalità del dispositivo (come l'orientamento del dispositivo e l'orientamento naturale).
Per assicurarti che l'anteprima della fotocamera si adatti correttamente a qualsiasi dimensione o orientamento della finestra, prendi in considerazione queste quattro soluzioni:
Soluzione 1: Jetpack CameraX (scelta consigliata)
La soluzione più semplice e robusta è utilizzare la libreria Jetpack CameraX. Il relativo elemento UI PreviewView è progettato per gestire automaticamente tutte le complessità dell'anteprima:
PreviewViewsi adatta correttamente all'orientamento del sensore, alla rotazione del dispositivo e al ridimensionamento- PreviewView mantiene le proporzioni dell'immagine della fotocamera, in genere centrando e ritagliando (
FILL_CENTER) - Se necessario, puoi impostare il tipo di ridimensionamento su
FIT_CENTERper aggiungere bande nere all'anteprima
Per ulteriori informazioni, consulta Implementare un'anteprima nella documentazione di CameraX.
Soluzione 2: CameraViewfinder
Se utilizzi una codebase Camera2 esistente, la libreria CameraViewfinder (compatibile con le versioni precedenti fino al livello API 21) è un'altra soluzione moderna. Semplifica la visualizzazione del feed videocamera utilizzando un TextureView o un SurfaceView e applicando tutte le trasformazioni necessarie (proporzioni, ridimensionamento e rotazione).
Per ulteriori informazioni, consulta il post del blog Introducing Camera Viewfinder e la guida per gli sviluppatori Anteprima della fotocamera.
Soluzione 3: implementazione manuale di Camera2
Se non puoi utilizzare CameraX o CameraViewfinder, devi calcolare manualmente l'orientamento e le proporzioni e assicurarti che i calcoli vengano aggiornati a ogni modifica della configurazione:
- Ottieni l'orientamento del sensore della fotocamera (ad esempio 0, 90, 180, 270 gradi) da
CameraCharacteristics - Ottieni la rotazione attuale del display del dispositivo (ad esempio 0, 90, 180, 270 gradi)
- Utilizza i valori di orientamento del sensore della fotocamera e di rotazione del display per determinare le trasformazioni necessarie per
SurfaceViewoTextureView - Assicurati che le proporzioni di
Surfacedi output corrispondano a quelle dell'anteprima della fotocamera per evitare distorsioni
Importante: tieni presente che l'app Fotocamera potrebbe essere in esecuzione in una parte dello schermo, in modalità multi-finestra o finestre desktop o su un display collegato. Per questo motivo, le dimensioni dello schermo non devono essere utilizzate per determinare le dimensioni del mirino della fotocamera; utilizza invece le metriche della finestra. In caso contrario, rischi di ottenere un'anteprima della fotocamera allungata.
Per ulteriori informazioni, consulta la guida per gli sviluppatori Anteprima della fotocamera e il video Your Camera app on different form factors.
Soluzione 4: esegui azioni di base della fotocamera utilizzando un intent
Se non hai bisogno di molte funzionalità della fotocamera, una soluzione semplice e diretta è eseguire azioni di base della fotocamera, come scattare una foto o registrare un video utilizzando l'applicazione Fotocamera predefinita del dispositivo. In questo caso, puoi semplicemente utilizzare un Intent anziché eseguire l'integrazione con una libreria della fotocamera, per una manutenzione e un'adattabilità più semplici.
Per ulteriori informazioni, consulta Intent della fotocamera.
Evita UI allungate o pulsanti inaccessibili
Se la tua app presuppone un orientamento specifico del dispositivo o proporzioni del display, potrebbe riscontrare problemi quando viene utilizzata con orientamenti o dimensioni delle finestre diversi.
Assicurati che pulsanti, campi di testo e altri elementi non siano allungati sugli schermi grandi.
Potresti aver impostato i pulsanti, i campi di testo e le schede su fillMaxWidth o match_parent. Su uno smartphone, questo aspetto è ottimo. Tuttavia, su un tablet o un pieghevole in orizzontale, gli elementi UI si estendono su tutto lo schermo grande. In Jetpack Compose, puoi utilizzare il modificatore widthIn per impostare una larghezza massima per i componenti ed evitare contenuti allungati:
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize()
) {
Column(
modifier = Modifier
.widthIn(max = 300.dp) // Prevents stretching beyond 300dp
.fillMaxWidth() // Fills width up to 300dp
.padding(16.dp)
) {
// Your content
}
}Se un utente apre la tua app in orientamento orizzontale su un pieghevole o un tablet, i pulsanti di azione come Salva o Accedi nella parte inferiore dello schermo potrebbero non essere visualizzati. Se il contenitore non è scorrevole, l'utente potrebbe non essere in grado di procedere. In Jetpack Compose, puoi aggiungere un modificatore verticalScroll al componente:
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(16.dp)
)Combinando i vincoli di larghezza massima con lo scorrimento verticale, ti assicuri che la tua app rimanga funzionale e utilizzabile, indipendentemente dalla larghezza o dall'altezza della finestra dell'app.
Consulta la nostra guida sulla creazione di layout adattivi.
Mantieni lo stato con le modifiche alla configurazione
La rimozione delle limitazioni di orientamento e proporzioni significa che le dimensioni della finestra dell'app cambieranno molto più spesso. Gli utenti potrebbero ruotare il dispositivo, aprirlo/chiuderlo o ridimensionare l'app in modo dinamico in modalità schermo diviso o finestre desktop.
Per impostazione predefinita, queste modifiche alla configurazione distruggono e ricreano l'attività. Se la tua app non gestisce correttamente questo evento del ciclo di vita, gli utenti avranno un'esperienza frustrante: le posizioni di scorrimento vengono reimpostate in alto, i moduli compilati a metà vengono cancellati e la cronologia di navigazione viene persa. Per garantire un'esperienza adattiva senza interruzioni, è fondamentale che la tua app mantenga lo stato durante queste modifiche alla configurazione. Con Jetpack Compose, puoi disattivare la ricreazione e consentire invece le modifiche alle dimensioni della finestra per ricomporre l'UI in modo da riflettere la nuova quantità di spazio disponibile.
Consulta la nostra guida sul salvataggio dello stato dell'UI.
Scelta come target del livello API 37 entro agosto 2027
Se in precedenza hai disattivato queste modifiche quando hai scelto come target il livello API 36, la rimozione della disattivazione di Android 17 avrà effetto sulla tua app solo dopo che avrà come target il livello API 37. Per aiutarti a pianificare in anticipo e apportare le modifiche necessarie alla tua app, ecco la tempistica di entrata in vigore di queste modifiche:
- Android 17: le modifiche descritte sopra saranno l'esperienza di base per i dispositivi con schermi grandi (larghezza dello schermo più piccola > 600 dp) per le app che hanno come target il livello API 37. Gli sviluppatori non avranno la possibilità di disattivare.
Le scadenze per la scelta come target di un livello API specifico sono specifiche per l'app store. Per Google Play, le nuove app e gli aggiornamenti dovranno avere come target il livello API 37, rendendo questo comportamento obbligatorio per la distribuzione ad agosto 2027.
Prepararsi per Android 17
Consulta la pagina delle modifiche di Android 17 per tutte le modifiche che interessano le app in Android 17. Per testare l'app, scarica Android 17 Beta 1 e aggiorna a targetSdkPreview = “CinnamonBun” o utilizza il framework di compatibilità delle app per attivare modifiche specifiche.
Il futuro di Android è adattivo e siamo qui per aiutarti a raggiungerlo. Mentre ti prepari per Android 17, ti invitiamo a consultare le nostre guide per la creazione di layout adattivi e le nostre norme sulla qualità per schermi grandi. Queste risorse sono progettate per aiutarti a gestire con sicurezza più fattori di forma e dimensioni delle finestre.
Non aspettare. Inizia oggi a prepararti per Android 17.
-
Novità sui prodottiCon l'aggiunta di nuovi fattori di forma come Pixel 10 Pro Fold all'ecosistema Android, lo sviluppo di app adattive è essenziale per creare esperienze utente di alta qualità su smartphone, tablet e pieghevoli.
Fahd Imtiaz, Miguel Montemayor • Tempo di lettura: 3 minuti -
Novità sui prodottiOffrire un'esperienza online sicura e proteggere gli utenti da danni è una delle principali priorità di Google Play.
Paul Feng • Tempo di lettura: 2 minuti -
Novità sui prodottiOggi festeggiamo ufficialmente i cinque anni dal rilascio di Jetpack Compose 1.0. Dalla versione 1.0, annunciata il 28 luglio 2021, alla nostra ultima release 1.11, abbiamo visto le API evolversi in modo significativo nel corso degli anni e ci prendiamo un momento per festeggiare.
Rebecca Franks, Nick Butcher, Loryn Hairston • Tempo di lettura: 5 minuti
Ricevi ogni settimana nella tua casella di posta gli ultimi approfondimenti sullo sviluppo di Android.