Novità sui prodotti

Prepara l'app per le modifiche alla ridimensionabilità e all'orientamento in Android 17

Lettura di 6 minuti
Miguel Montemayor
Ing. relazioni con gli sviluppatori

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'interfaccia utente riempia lo spazio di visualizzazione disponibile e si adatti alla postura del dispositivo.

Abbiamo introdotto modifiche significative alle API di orientamento e ridimensionabilità 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 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.

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 del tempo di esecuzione 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 di grandi dimensioni, dove schermo di grandi dimensioni significa che la dimensione più piccola del display è maggiore o uguale a 600 dp, i seguenti attributi del file manifest e 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/APIValori ignorati
screenOrientationportrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape
setRequestedOrientation()portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape
resizeableActivityall
minAspectRatioall
maxAspectRatioall

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'interfaccia utente e ricevere suggerimenti per renderla più adattiva con Controllo UI di Compose 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.

camera_preview_issue.png

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

Questo problema si verifica spesso sui 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 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:

  • PreviewView si adatta correttamente all'orientamento del sensore, alla rotazione del dispositivo e alla scalabilità
  • PreviewView mantiene le proporzioni dell'immagine della fotocamera, in genere centrando e ritagliando (FILL_CENTER)
  • Se necessario, puoi impostare il tipo di scala su FIT_CENTER per aggiungere bande nere all'anteprima

Per saperne di più, 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 SurfaceView e applicando tutte le trasformazioni necessarie (proporzioni, scala e rotazione).

Per saperne di più, 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 es. 0, 90, 180, 270 gradi) da CameraCharacteristics
  • Ottieni la rotazione attuale del display del dispositivo (ad es. 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 SurfaceView o TextureView
  • Assicurati che le proporzioni di Surface di output corrispondano alle proporzioni 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 saperne di più, 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é integrarlo con una libreria della fotocamera, per una manutenzione e un'adattabilità più semplici. 

Per saperne di più, consulta Intent della fotocamera.

Evita l'interfaccia utente allungata o i 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 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 i pulsanti, i campi di testo e le schede su fillMaxWidth o match_parent. Su uno smartphone, l'aspetto è ottimo. Tuttavia, su un tablet o un pieghevole in orizzontale, gli elementi dell'interfaccia utente 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 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 su come creare 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 possono 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'interfaccia utente in modo da riflettere la nuova quantità di spazio disponibile.

Consulta la nostra guida su come salvare lo stato dell'interfaccia utente.

Scegli come target il livello API 37 entro agosto 2027

Se in precedenza hai disattivato queste modifiche quando hai scelto come target il livello API 36, la tua app sarà interessata dalla rimozione della disattivazione di Android 17 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 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.

Le scadenze per scegliere come target 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 noi siamo qui per aiutarti a raggiungerlo. Mentre ti prepari per Android 17, ti invitiamo a consultare le nostre guide su come creare layout adattivi e le nostre norme sulla qualità per 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 subito a prepararti per Android 17.

Scritto da:

Continua a leggere