Novità sul prodotto

Preparare l'app per le modifiche apportate a ridimensionamento e orientamento in Android 17

Lettura di 6 minuti
Miguel Montemayor
Developer Relations Engineer

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, 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 la 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 correttamente a questa transizione quando hanno scelto come target il livello API 36.

Ora, con il rilascio della beta di Android 17, passiamo alla fase successiva della nostra roadmap adattiva: Android 17 (livello API 37) rimuove la disattivazione per sviluppatori per le limitazioni di orientamento e ridimensionabilità sui dispositivi con schermi di grandi dimensioni (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.

Cosa cambia in Android 17

Le app che hanno come target Android 17 devono garantire la compatibilità con l'eliminazione graduale degli attributi del manifest e delle API di runtime introdotte in Android 16. Siamo consapevoli che per alcune app questa potrebbe essere una transizione importante, pertanto abbiamo incluso best practice e strumenti per evitare problemi comuni più avanti in questo post del blog.

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 viene eseguita su un grande schermo, dove grande schermo significa che la dimensione più piccola del display è maggiore o uguale a 600 dp, i seguenti attributi manifest e API vengono ignorati:

Nota: come accennato in precedenza per Android 16, queste modifiche non si applicano agli schermi più piccoli di 600 dp o alle app classificate come giochi in base al flag android:appCategory

Attributi/API manifestValori ignorati
screenOrientationportrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape
setRequestedOrientation()portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape
resizeableActivitytutti
minAspectRatiotutti
maxAspectRatiotutti

Inoltre, gli utenti mantengono il controllo. Nelle impostazioni delle proporzioni, gli utenti possono attivare esplicitamente l'utilizzo del comportamento richiesto dall'app.

Preparare l'app

Le app dovranno supportare i layout orizzontale e verticale per le dimensioni di visualizzazione nell'intera gamma di formati 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 al formato verticale o orizzontale.

Testare 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 controllare automaticamente la tua UI e ricevere suggerimenti per renderla più adattabile con Compose UI Check e simulare caratteristiche di visualizzazione specifiche nei test utilizzando DeviceConfigurationOverride.

Per le app che hanno sempre limitato l'orientamento e le proporzioni, si verificano spesso problemi con anteprime della videocamera 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.

Garantire la compatibilità della videocamera

Un problema comune sui dispositivi pieghevoli orizzontali o per i calcoli delle proporzioni in scenari come Multi-finestra, finestre delle app o display collegati, si verifica quando l'anteprima della videocamera appare allungata, ruotata o ritagliata.

camera_preview_issue.png

Assicurati che l'anteprima della videocamera non sia allungata o ruotata.

Questo problema si verifica spesso su dispositivi con schermi di grandi dimensioni 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 videocamera si adatti correttamente a qualsiasi dimensione o orientamento della finestra, valuta queste quattro soluzioni:

Soluzione 1: Jetpack CameraX (preferita) 

La soluzione più semplice e solida è utilizzare la libreria Jetpack CameraX. Il relativo elemento UI PreviewView è progettato per gestire automaticamente tutte le complessità dell'anteprima:

  • PreviewView si adatta correttamente all'orientamento del sensore, alla rotazione del dispositivo e al ridimensionamento
  • PreviewView mantiene le proporzioni dell'immagine della videocamera, in genere centrando e ritagliando (FILL_CENTER)
  • Se necessario, puoi impostare il tipo di scala su FIT_CENTER per letterboxare l'anteprima.

Per saperne di più, consulta la sezione Implementare un'anteprima nella documentazione di CameraX.

Soluzione 2: CameraViewfinder 

Se utilizzi una base di codice 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 SurfaceView e applicando tutte le trasformazioni necessarie (proporzioni, scala e rotazione).

Per ulteriori informazioni, consulta il post del blog Introducing Camera Viewfinder e la Guida per gli sviluppatori.

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 videocamera (ad esempio, 0, 90, 180, 270 gradi) da CameraCharacteristics
  • Ottieni la rotazione del display corrente del dispositivo (ad esempio, 0, 90, 180, 270 gradi)
  • Utilizza i valori di orientamento del sensore della fotocamera e rotazione del display per determinare le trasformazioni necessarie per il tuo SurfaceView o TextureView
  • Assicurati che le proporzioni dell'output Surface corrispondano a quelle dell'anteprima della videocamera per evitare distorsioni

Importante:tieni presente che l'app della videocamera potrebbe essere in esecuzione in una parte dello schermo, in modalità multi-finestra o finestra del desktop oppure su un display connesso. Per questo motivo, le dimensioni dello schermo non devono essere utilizzate per determinare le dimensioni del mirino della videocamera. Utilizza invece le metriche della finestra. In caso contrario, l'anteprima della videocamera potrebbe essere allungata.

Per ulteriori informazioni, consulta la guida per gli sviluppatori Anteprima della videocamera e il video L'app Fotocamera su diversi fattori di forma.

Soluzione 4: esegui azioni di base della videocamera 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 di fotocamere, per una manutenzione e un'adattabilità più semplici. 

Per ulteriori informazioni, vedi Intent della videocamera.

Evita UI allungate o pulsanti inaccessibili

Se la tua app presuppone un orientamento specifico del dispositivo o una proporzione del display, potrebbe riscontrare problemi quando viene utilizzata con orientamenti o dimensioni della finestra diversi.

elementsLS.png

Assicurati che pulsanti, campi di testo e altri elementi non siano allungati sugli schermi di grandi dimensioni.

Potresti aver impostato pulsanti, campi di testo e schede su fillMaxWidthmatch_parent.  Su uno smartphone, ha un aspetto fantastico. Tuttavia, su un tablet o un dispositivo pieghevole in modalità orizzontale, gli elementi UI si estendono su tutto lo schermo di grandi dimensioni. 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 dispositivo 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 riuscire ad andare avanti. In Jetpack Compose, puoi aggiungere un modificatore verticalScroll al tuo 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.

Preservare lo stato con le modifiche alla configurazione

La rimozione delle limitazioni di orientamento e formato comporta una modifica molto più frequente delle dimensioni della finestra dell'app. Gli utenti possono ruotare il dispositivo, piegarlo/aprirlo o ridimensionare l'app in modo dinamico nelle modalità di visualizzazione a schermo diviso o a finestre.

Per impostazione predefinita, queste modifiche alla configurazione eliminano 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 che le modifiche alle dimensioni della finestra ricompongano la UI in modo da riflettere la nuova quantità di spazio disponibile.

Consulta la nostra guida sul salvataggio dello stato dell'interfaccia utente.

Targeting del livello API 37 entro agosto 2027

Se in precedenza la tua app ha disattivato queste modifiche quando aveva come target il livello API 36, sarà interessata dalla rimozione della disattivazione di Android 17 solo dopo aver avuto come target il livello API 37. Per aiutarti a pianificare in anticipo e ad apportare le modifiche necessarie alla tua app, ecco la cronologia di quando entreranno in vigore queste modifiche:

  • Android 17: le modifiche descritte sopra saranno l'esperienza di base per i dispositivi con schermi di grandi dimensioni (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 questa opzione.

Le scadenze per il targeting di un livello API specifico sono specifiche per ogni 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 la tua 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 gli schermi di grandi dimensioni. Queste risorse sono progettate per aiutarti a gestire con sicurezza più fattori di forma e dimensioni delle finestre.

Non aspettare. Inizia a prepararti per Android 17 oggi stesso.

Scritto da:

Continua a leggere