Android attiva una modalità di compatibilità per le app che dichiarano limitazioni relative all'orientamento o alla ridimensionabilità. La modalità compatibilità garantisce un comportamento accettabile dell'app sui dispositivi con schermi grandi, ma con un'usabilità non ottimale.
Gli override per app consentono ai produttori di dispositivi di modificare il comportamento dell'app per migliorare l'esperienza utente o per evitare che le app si interrompano su schermi di grandi dimensioni.
Problemi di compatibilità comuni
Il più delle volte le app presentano problemi di compatibilità a causa di limitazioni relative all'orientamento, ridimensionabilità e proporzioni, gestione errata dell'orientamento dell'anteprima della fotocamera e API utilizzate in modo improprio.
Letterboxing
Il formato Letterbox posiziona l'app al centro dello schermo o, su schermi di grandi dimensioni, su un lato o sull'altro per un comodo accesso. Gli elementi opachi (barre a tinta unita o sfondo sfocato) riempiono l'area di visualizzazione inutilizzata lungo i lati o nella parte superiore e inferiore dell'app.
Il formato letterbox si verifica spesso sui dispositivi con schermi di grandi dimensioni, poiché le dimensioni e il formato del display del dispositivo sono generalmente diversi da quelli dei telefoni standard, per i quali è stata progettata la maggior parte delle app.
Problema
L'app non supporta tutte le configurazioni di visualizzazione perché ha orientamento fisso, proporzioni fisse o non è ridimensionabile.
Le impostazioni di configurazione che controllano l'orientamento e la ridimensionabilità dell'app includono:
screenOrientation
: consente di specificare un orientamento fisso per un'app. Le app possono anche impostare l'orientamento in fase di runtime utilizzandoActivity#setRequestedOrientation()
.resizeableActivity
: indica se il sistema può ridimensionare le app per adattarle a finestre di varie dimensioni. Su Android 11 (livello API 30) e versioni precedenti, consente di specificare se le app supportano la modalità multi-finestra. Su Android 12 (livello API 31) e versioni successive, consente di specificare se le app supportano la modalità multi-finestra su schermi di piccole dimensioni (sw < 600 dp). Su Android 12 e versioni successive, le app supportano la modalità multi-finestra su schermi di grandi dimensioni (sw >= 600 dp), indipendentemente da questa impostazione.maxAspectRatio
: consente di specificare le proporzioni massime supportate dall'app. Solo le app conresizeableActivity
impostato su false possono impostaremaxAspectRatio
.minAspectRatio
: consente di specificare le proporzioni minime supportate dall'app. Solo le app conresizeableActivity
impostato su false possono impostareminAspectRatio
.
Ottimizzazione
L'app deve supportare tutti gli orientamenti e le dimensioni del display in modalità multi-finestra e dispositivo. Rimuovi tutte le limitazioni relative all'orientamento e alle proporzioni fisse dai layout e dal file manifest dell'app. Per ulteriori informazioni, vedi Supportare schermi di dimensioni diverse.
Soluzione alternativa di compatibilità
Se un'app con orientamento fisso o proporzioni fisse viene eseguita in una finestra in cui non supporta direttamente le dimensioni o l'orientamento della finestra, Android applica delle letterbox all'app per garantire la continuità.
A partire da Android 12 (livello API 31) e fino alla versione 12L (livello API 32), la piattaforma applica una serie di miglioramenti alle app letterbox. I produttori di dispositivi implementano i miglioramenti all'interfaccia utente: non è necessario sviluppare altri sviluppi per la tua app per beneficiare dei miglioramenti.
Android 12 (livello API 31) introduce i seguenti miglioramenti estetici, che possono essere configurati dai produttori dei dispositivi:
- Angoli arrotondati:gli angoli della finestra dell'app hanno un aspetto più raffinato.
- Trasparenza della barra di sistema: le barre di stato e di navigazione, che si sovrappongono all'app, sono semitrasparenti, rendendo le icone sulle barre sempre visibili sopra lo sfondo delle caselle.
- Proporzioni configurabili: le proporzioni dell'app possono essere regolate per migliorarne l'aspetto.
12L (livello API 32) aggiunge i seguenti miglioramenti funzionali:
- Posizionamento configurabile: su schermi di grandi dimensioni, i produttori di dispositivi possono posizionare l'app a sinistra o a destra del display, semplificando l'interazione.
- Pulsante di riavvio rinnovato: i produttori dei dispositivi possono dare al pulsante di riavvio per la modalità di compatibilità delle dimensioni un nuovo aspetto per migliorare il riconoscimento da parte degli utenti.
Android 13 (livello API 33) aggiunge una finestra di dialogo informativa per l'utente sul posizionamento dell'app letterbox sullo schermo o su come includere questa app in modalità schermo diviso:
Modalità di compatibilità dimensioni
La modalità di compatibilità delle dimensioni è letterbox che include un controllo di riavvio. Il controllo consente agli utenti di riavviare l'app e tracciare di nuovo il display. Android richiama la modalità di compatibilità delle dimensioni per le app che non sono ridimensionabili. Quando un'attività viene spostata in un contenitore display con dimensioni incompatibili, il sistema potrebbe ridimensionare l'app per riempire la visualizzazione del dispositivo in almeno una dimensione.
Le modifiche alla configurazione del dispositivo che possono attivare la modalità di compatibilità delle dimensioni includono quanto segue:
- Rotazione del dispositivo
- Dispositivo pieghevole che si piega o si apre
- Passare dalla modalità a schermo intero a quella a schermo diviso e viceversa
Problema
La modalità di compatibilità delle dimensioni si applica in genere ad attività con orientamento o proporzioni limitate e che sono configurate (o stabilite dal sistema) per essere non ridimensionabili.
La tua app è considerata ridimensionabile e non verrà posizionata in modalità di compatibilità delle dimensioni se soddisfa uno dei seguenti criteri:
È ridimensionabile con
resizeableActivity="true"
Supporta la modalità Picture in picture (PIP).
Ha l'override per app
FORCE_RESIZE_APP
applicato dal produttore del dispositivo (le proprietà impostate dall'app vengono ignorate)
Se la tua app non soddisfa nessuna delle condizioni, viene considerata non ridimensionabile e potrebbe essere inserita in modalità di compatibilità delle dimensioni.
Ottimizzazione
L'app deve supportare tutte le dimensioni di visualizzazione. Rendi ridimensionabile la tua app impostando l'attributo android:resizeableActivity
dell'elemento <activity>
o <application>
su true nel file manifest dell'app. Progetta layout adattabili/adattivi per la tua app. Per ulteriori informazioni, leggi l'articolo Supporto di diverse dimensioni dello schermo e Supporto della modalità multi-finestra.
Soluzione alternativa di compatibilità
Android imposta un'app in modalità di compatibilità delle dimensioni quando il sistema stabilisce che la visualizzazione dell'app letterbox può essere migliorata ridimensionando l'app in modo che riempia la finestra di visualizzazione in almeno una dimensione. Il sistema visualizza un controllo di riavvio che ricrea il processo dell'app, ricreando l'attività e rifacendo il disegno del display. Vedi anche Panoramica dei processi e dei thread.
Loop sfarfallanti
Quando un'app non supporta tutti gli orientamenti del display, può richiedere ripetutamente nuovi orientamenti quando si verifica una modifica della configurazione, creando un loop infinito che fa sfarfallare il display o l'app ruotare all'infinito.
Problema
Su Android 12 (livello API 31) e versioni successive, i produttori possono configurare i propri dispositivi in modo da ignorare le limitazioni di orientamento specificate dalle app e utilizzare invece le limitazioni per guidare le modalità di compatibilità. Ad esempio, un dispositivo pieghevole potrebbe ignorare l'impostazione android:screenOrientation="portrait"
di un'attività quando l'attività viene visualizzata sullo schermo interno delle dimensioni del tablet orizzontale del dispositivo.
Se le limitazioni di orientamento di un'app vengono ignorate, l'app può impostare il proprio orientamento in modo programmatico chiamando il numero Activity#setRequestedOrientation()
. La chiamata attiva il riavvio dell'app se questa non gestisce le modifiche alla configurazione (vedi Gestire le modifiche alla configurazione). Dopo il riavvio, le limitazioni di orientamento dell'app vengono nuovamente ignorate, l'app ripete la chiamata a setRequestedOrientation()
, la chiamata attiva il riavvio dell'app e così via in un loop che si ripete autonomamente.
Questo può verificarsi anche quando l'orientamento naturale (l'orientamento normale determinato da Android) dello schermo di un dispositivo è orizzontale. In altre parole, la chiamata a Display#getRotation()
restituisce Surface.ROTATION_0
mentre il dispositivo ha proporzioni orizzontali. In passato, le app hanno presupposto che Display.getRotation() = Surface.ROTATION_0
significasse che il dispositivo è in orientamento verticale, ma non sempre è così, ad esempio sullo schermo interno di Pixel Fold e su alcuni tablet.
Un'app con orientamento orizzontale su un display interno di Pixel Fold potrebbe controllare la rotazione dello schermo, ricevere un valore di ROTATION_0
, presumere che l'orientamento naturale sia verticale e chiamare setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
. Dopo il riavvio (con orientamento orizzontale), l'app potrebbe controllare di nuovo la rotazione dello schermo, ricevere il valore ROTATION_0
, chiamare setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
e così via a un ciclo infinito.
Ottimizzazione
Le app non devono:
- Imposta un orientamento predefinito con
Activity#setRequestedOrientation()
nel metodo dell'attivitàonCreate()
perché la richiesta di orientamento può essere attivata in modo imprevisto da modifiche alla configurazione non gestite - Supponiamo che l'orientamento naturale del dispositivo (
ROTATION_0
) sia verticale - Imposta l'orientamento in base a indicatori non correlati alle dimensioni correnti della finestra, come
Display#getRotation()
, presenza diFoldingFeature
o API deprecate (vedi di seguito).
Soluzione alternativa di compatibilità
Android ignora le chiamate a Activity#setRequestedOrientation()
nelle seguenti situazioni:
L'attività è già stata riavviata da una chiamata precedente al metodo o è stata attivata la funzionalità di rotazione forzata della fotocamera (vedi Anteprima della videocamera di seguito).
I produttori di dispositivi possono applicare questo comportamento a un'app con
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
.L'attività ha effettuato più di due richieste di orientamento in un secondo, a indicare che si è verificato un loop. Delle due richieste nel ciclo, Android utilizza quella che massimizza l'area di visualizzazione dell'app.
I produttori di dispositivi possono applicare questo comportamento a un'app con
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
.
Anteprima fotocamera
L'anteprima della fotocamera (o mirino) delle app fotocamera può essere disallineata o distorta su tablet, laptop e display pieghevoli.
Problema
La Definizione di compatibilità con Android afferma che un sensore fotografico della fotocamera "DEVE essere orientato in modo che la dimensione lunga della fotocamera sia in linea con quella dello schermo".
Le app spesso presuppongono che l'orientamento del dispositivo e del sensore della fotocamera siano verticali, un'ipotesi ragionevole sui cellulari standard. Tuttavia, l'orientamento naturale di tablet e laptop e dei sensori della fotocamera può essere orizzontale. Inoltre, i nuovi fattori di forma, come i pieghevoli, possono avere più orientamenti naturali e molteplici sensori della fotocamera con orientamenti diversi.
L'avvio di un'attività con un orientamento della fotocamera previsto dall'app o il passaggio da una fotocamera all'altra o da uno schermo all'altro del dispositivo (per i dispositivi pieghevoli) può causare un'anteprima della fotocamera disallineata o distorta.
Ottimizzazione
Le app della fotocamera devono identificare e gestire correttamente l'orientamento del dispositivo e del sensore della fotocamera per presentare un'anteprima della fotocamera allineata e scalata correttamente. Le app devono calcolare la rotazione del dispositivo, la rotazione del sensore e le proporzioni dello schermo o delle finestre, quindi applicare i risultati all'anteprima della fotocamera. Per indicazioni dettagliate, vedi Anteprima della fotocamera e Introduzione al mirino della fotocamera.
Soluzione alternativa di compatibilità
Un dispositivo ha un orientamento naturale quando Display#getRotation()
restituisce Surface.ROTATION_0
. Il sistema calcola CameraCharacteristics.SENSOR_ORIENTATION
in base all'orientamento naturale del dispositivo. Android allinea la finestra verticale delle app con limitazioni per l'orientamento verticale all'orientamento naturale del dispositivo, che è ciò che si aspetta la maggior parte delle app. Android ritaglia anche l'immagine del sensore della fotocamera quando l'orientamento del sensore è orizzontale e l'anteprima della fotocamera è verticale. Le soluzioni specifiche sono le seguenti:
Forza la rotazione delle anteprime della fotocamera per le app con limitazioni relative all'orientamento verticale: le app con orientamento verticale si aspettano che l'orientamento naturale del dispositivo e l'orientamento del sensore della fotocamera siano verticali. Tuttavia, su Android 12 (livello API 31) e versioni successive, le app possono essere eseguite con diversi orientamenti del dispositivo se i produttori ignorano la specifica dell'orientamento.
Quando un'app con limitazioni per l'orientamento verticale è collegata alla fotocamera, Android forza la rotazione dell'app per allineare la finestra verticale dell'app all'orientamento naturale del dispositivo.
Su Pixel Tablet, la finestra verticale dell'app viene ruotata in modalità a schermo intero per allinearla all'orientamento naturale del dispositivo. L'app occupa l'intero schermo dopo la rotazione forzata.
Sullo schermo interno di Pixel Fold, le attività solo verticali vengono ruotate in orizzontale per allinearsi all'orientamento naturale aperto. L'app viene visualizzata dopo la rotazione forzata.
Ritaglio della fotocamera anteriore interna: il sensore della fotocamera anteriore interno su Pixel Fold è in orientamento orizzontale. Oltre a forzare la rotazione dell'anteprima della fotocamera sul display interno di Pixel Fold, Android ritaglia il campo visivo della fotocamera anteriore interno (orizzontale) in modo che il sensore acquisisca una visuale opposta all'orientamento del dispositivo.
Forza l'aggiornamento delle anteprime della videocamera: dopo la rotazione forzata, il sistema utilizza i metodi di attività
onStop()
eonStart()
(per impostazione predefinita) oonPause()
eonResume()
(applicati dall'override per app OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) per garantire che l'anteprima della fotocamera venga visualizzata correttamente.Ridimensionamento formato immagine: il sistema modifica in modo dinamico le proporzioni dell'anteprima della fotocamera con rotazione forzata per impostare le proporzioni minime più elevate, assicurando che l'anteprima della fotocamera venga scalata correttamente.
Gli sviluppatori di app possono ignorare queste soluzioni se le app gestiscono correttamente l'anteprima della fotocamera. Consulta la sezione Override per app di seguito.
API usate comunemente in modo improprio
Android ha aggiunto il supporto di funzionalità come la modalità multi-finestra e dispositivi come i pieghevoli, pertanto le API precedenti sono state ritirate e sostituite da API aggiornate compatibili con tutte le dimensioni di display e tutti i fattori di forma dei dispositivi. Tuttavia, le API ritirate sono ancora disponibili per la compatibilità con le versioni precedenti.
Alcune API View
sono progettate per scopi speciali che non sono sempre ben compresi dagli sviluppatori.
Problema
Gli sviluppatori continuano a utilizzare le API Display
deprecate e presuppongono erroneamente che le API restituiscano i limiti dell'app anziché i limiti dell'area di visualizzazione del dispositivo. Oppure gli sviluppatori utilizzano per errore le API View per scopi speciali per ottenere metriche di visualizzazione generali. Ne risultano calcoli errati durante il riposizionamento degli elementi UI dopo gli eventi di ridimensionamento della finestra dell'app, che causano problemi di layout.
API display deprecate e usate comunemente in modo improprio:
Per ulteriori informazioni, vedi Supporto della modalità multi-finestra.
API di visualizzazione usate in modo improprio:
Ottimizzazione
Non fare mai affidamento sulle dimensioni del display fisico per il posizionamento degli elementi UI. Esegui la migrazione della tua app alle API basate su WindowMetrics
, incluse le seguenti API di WindowManager
:
- Piattaforma:
- Jetpack:
Soluzione alternativa di compatibilità
Due override modificano le API Display
deprecate e hanno utilizzato in modo improprio le API View
per restituire i limiti dell'app: ALWAYS_SANDBOX_DISPLAY_APIS
per le API Display
e OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
per le API View
. L'istruzione ALWAYS_SANDBOX_DISPLAY_APIS
viene applicata per impostazione predefinita anche alle app idonee alla modalità di compatibilità delle dimensioni.
Attività trasparenti
Le attività trasparenti sono il risultato di stili di sfondo trasparenti, ad esempio:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
I temi relativi alle finestre di dialogo, come Theme.Material.Dialog
, possono includere stili che rendono trasparenti le attività.
Le attività trasparenti non coprono tutto lo spazio di visualizzazione disponibile. Questo le rende difficili da gestire su schermi di grandi dimensioni perché l'area di visualizzazione disponibile può cambiare in base a modifiche della configurazione, ad esempio la rotazione del dispositivo, il ripiegamento e l'apertura del dispositivo e la modalità multi-finestra.
Problema
Su schermi di grandi dimensioni, un'attività trasparente deve conformarsi ai limiti della prima attività opaca sotto l'attività trasparente nello stack delle attività dell'attività. Tuttavia, un'attività opaca che avvia una finestra di dialogo di autorizzazione può essere un trampoline (un'attività che avvia altre attività) che scompare dopo l'avvio della finestra di dialogo; di conseguenza, il sistema non è in grado di determinare i limiti dell'attività opaca sotto l'attività trasparente.
Ottimizzazione
Le attività traslucide ereditano i vincoli dall'attività opaca più in alto sottostante nello stack di attività di un'attività. L'attività opaca deve essere disponibile per l'intero ciclo di vita dell'attività traslucida, dalla creazione dell'attività alla distruzione. Per questo motivo, non devi lanciare richieste di autorizzazione dalle attività di tappeti elastici.
Se un'attività di trampolino avvia una richiesta di autorizzazione, l'utente potrebbe non riuscire a vedere la finestra di dialogo di autorizzazione perché l'attività di trampolino è stata eliminata prima che l'utente abbia avuto la possibilità di rispondere alla finestra di dialogo.
Le app dovrebbero sempre avviare richieste di autorizzazione da attività che rimangono visibili fino a quando l'utente non prende una decisione in merito all'autorizzazione.
Angoli arrotondati
Un'attività può essere traslucida utilizzando un tema traslucido o non occupando lo spazio di visualizzazione disponibile. Se un'attività traslucida riempie lo spazio di visualizzazione disponibile, il sistema applica automaticamente gli angoli arrotondati all'attività, se configurato dal produttore del dispositivo. Tuttavia, se un'attività semitrasparente (ad esempio una finestra di dialogo di autorizzazione) non riempie lo spazio disponibile, spetta a te decidere se applicare o meno gli angoli arrotondati.
Le finestre di dialogo delle autorizzazioni non occupano lo spazio di visualizzazione disponibile perché in genere il layout delle finestre di dialogo utilizza LayoutParams.WRAP_CONTENT anziché LayoutParams.MATCH_PARENT.
Soluzione alternativa di compatibilità
Mantieni visibili le attività che avviano le attività delle finestre di dialogo finché l'utente non risponde alla finestra di dialogo.
Il sistema garantisce che un'attività trasparente erediti tutti i vincoli dalla prima attività opaca sotto l'attività trasparente nell'elenco delle attività, inclusi i vincoli relativi a:
- Modalità di compatibilità dimensioni
- Orientamento
- Formato
Giochi di unione
I giochi Unity vengono eseguiti su Android a schermo intero o in modalità multi-finestra. Tuttavia, molti giochi Unity perdono lo stato attivo e smettono di disegnare contenuti quando l'app è impostata in modalità multi-finestra.
Problema
Unity ha aggiunto un'opzione Resizable Window
per supportare la modalità multi-finestra su Android da Unity 2019.4. Tuttavia, l'implementazione iniziale non ha reagito correttamente al ciclo di vita delle attività in modalità multi-finestra, causando la sospensione della riproduzione da parte di UnityPlayer quando l'app perde lo stato attivo. Il giocatore ha mostrato una schermata nera o l'ultimo frame bloccato del gioco. Il gameplay è stato ripreso solo quando l'utente ha toccato lo schermo. Molte app che utilizzano il motore Unity affrontano questo problema e vengono visualizzate come finestra nera in modalità multi-finestra.
Ottimizzazione
Esegui l'upgrade di Unity alla versione 2019.4.40 o successiva ed esporta di nuovo il tuo gioco. Mantieni selezionata l'opzione Resizable Window
nelle impostazioni di Android Player, altrimenti il gioco viene messo in pausa quando non è a fuoco anche se il gioco è interamente visibile in modalità multi-finestra.
Soluzione alternativa di compatibilità
I produttori di dispositivi possono applicare l'override di OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
per app per fornire un evento di stato attivo fasullo a un'app in modalità multi-finestra. L'override consente all'attività di tracciare nuovamente i contenuti senza oscurare l'attività.
Testare l'app per verificare la presenza di problemi di compatibilità
Per testare la tua app e capire come si comporta sui diversi fattori di forma, consulta le seguenti risorse:
- Streaming dispositivo:per testare la tua app su dispositivi di produzione (inclusi Pixel Tablet e Pixel Fold) ospitati nei data center di Google, consulta l'articolo Streaming su dispositivi Android da Android Studio.
- Emulatori per Pixel Tablet e Pixel Fold in Android Studio Hedgehog:per informazioni sulla creazione di emulatori per Pixel Tablet e Pixel Fold, visita la pagina Creare e gestire dispositivi virtuali
- Emulatore ridimensionabile di Android Studio: per informazioni sull'accesso ai dispositivi virtuali, vedi Eseguire app sull'emulatore Android
Con effetto letterbox
Verifica che ogni attività possa utilizzare tutto lo spazio di visualizzazione disponibile per l'app. Innanzitutto, dichiara il seguente codice nella cartella di test:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
Quindi, esegui un test per dichiarare il comportamento e assicurati che l'attività target non sia formattata:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRulerule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
Idealmente, esegui questo tipo di test solo finché non supera il test e afferma che le attività della tua app occupano l'intero spazio di visualizzazione disponibile per l'app. Testa l'app su tutti i tipi di dispositivi per garantire un comportamento coerente.
Override per app
Android fornisce override che modificano il comportamento configurato delle app. Ad esempio, la sostituzione di FORCE_RESIZE_APP
indica al sistema di ignorare la modalità di compatibilità delle dimensioni e ridimensionare l'app in base alle dimensioni di visualizzazione anche se nel file manifest dell'app è impostato l'opzione resizeableActivity="false"
.
I produttori di dispositivi applicano sostituzioni ad app selezionate su specifici dispositivi con schermi grandi. Su Android 14 (livello API 34) e versioni successive, gli utenti possono applicare override alle app tramite le impostazioni del dispositivo.
Override per app utente
Su Android 14 e versioni successive, un menu delle impostazioni consente agli utenti di modificare le proporzioni delle app. I dispositivi con schermo grande come Pixel Tablet e Pixel Fold implementano il menu.
Il menu contiene un elenco di tutte le app installate sul dispositivo. Gli utenti scelgono un'app, quindi impostano le proporzioni dell'app su 3:4, 1:1, schermo intero o altro valore configurato dal produttore del dispositivo. Gli utenti possono anche reimpostare le proporzioni sul valore predefinito dell'app, ovvero il valore specificato nel file manifest dell'app.
Per le app è possibile disattivare l'override della compatibilità impostando i seguenti tag PackageManager.Property
:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Per disattivare l'override della compatibilità delle proporzioni utente, aggiungi la proprietà al file manifest dell'app e imposta il valore su
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
La tua app verrà esclusa dall'elenco di app nelle impostazioni del dispositivo. Gli utenti non potranno sostituire le proporzioni dell'app.
L'impostazione della proprietà su
true
non ha alcun effetto.
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Per disattivare l'opzione a schermo intero dell'override della compatibilità delle proporzioni utente, aggiungi la proprietà al file manifest dell'app e imposta il valore su
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
L'opzione per la modalità a schermo intero viene rimossa dall'elenco delle opzioni relative alle proporzioni nelle impostazioni del dispositivo. Gli utenti non potranno applicare l'override a schermo intero alla tua app.
L'impostazione di questa proprietà su
true
non ha alcun effetto.
Ottimizza l'app per schermi di grandi dimensioni: non impostare limitazioni per le proporzioni nella tua app. Utilizza le classi di dimensioni delle finestre per supportare layout diversi in base alla quantità di spazio di visualizzazione disponibile.
Override app del produttore del dispositivo
I produttori di dispositivi applicano le sostituzioni in base alle singole app su dispositivi specifici. Per impostazione predefinita, Pixel Tablet e Pixel Fold applicano alcuni degli override a una vasta gamma di app.
Le app possono disattivare la maggior parte degli override (consulta la tabella Override per app di seguito).
Puoi testare la tua app attivando o disattivando gli override utilizzando il framework di compatibilità (vedi Strumenti del framework di compatibilità). Quando sono attivati, gli override vengono applicati all'intera app.
Puoi anche utilizzare Android Debug Bridge (adb) per attivare o disattivare gli override e per determinare quali override si applicano alla tua app.
Attiva o disattiva gli override come segue:
adb shell am compat enable/disable <override name/id> <package>
Per Pixel Tablet e Pixel Fold, controlla quali override si applicano alla tua app:
adb shell dumpsys platform_compat | grep <package name>
La seguente tabella elenca le sostituzioni disponibili insieme a indicazioni su come ottimizzare la tua app in modo che non debba fare affidamento sugli override. Puoi aggiungere flag delle proprietà al file manifest dell'app per disattivare alcuni override.
Override per app | |||
---|---|---|---|
Tipo | Nome | ID | Descrizione |
Ridimensionabilità | APP FORCE_RESIZE_APP | 174042936 | Ignora la modalità di compatibilità delle dimensioni per l'app in caso di modifiche alla configurazione. |
FORCE_NON_RESIZE_APP | 181136395 | Forza la modalità di compatibilità delle dimensioni dell'app in caso di modifiche alla configurazione. | |
Proporzioni | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Override del gatekeeper che deve essere attivato per applicare eventuali altre sostituzioni delle proporzioni. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Se questa opzione è abilitata (impostazione predefinita), limita l'ambito di override alle attività solo verticali. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Modifica le proporzioni minime in 3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Modifica le proporzioni minime in 16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Modifica le proporzioni minime per adattare il 50% delle dimensioni del display (o delle proporzioni dello schermo diviso). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Disattiva la sostituzione delle proporzioni minime in modo che le app siano a schermo intero quando il dispositivo è verticale. | |
Orientamento | OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Consente di sostituire l'orientamento in modo che sia verticale quando un'attività ha un orientamento non definito. |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Esegue l'override dell'orientamento in modo che sia nosensor (utilizza l'orientamento naturale del dispositivo) quando un'attività ha un orientamento non definito. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Ruota di 180 gradi le app solo orizzontali. | |
OVERRIDE_ANY_ORIENTATION | 265464455 | Consente di sostituire qualsiasi orientamento. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Limita l'ambito di override dell'orientamento al momento in cui l'app è connessa alla fotocamera. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Consente di impostare il display con un orientamento naturale orizzontale fisso quando un'attività è a schermo intero (anche se adattata al formato letterbox). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Ignora le richieste di orientamento dall'app per evitare cicli di rotazione. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Ignora le richieste di orientamento ripetute durante il riavvio di un'attività. Se Android rileva che un'app richiede almeno due nuovi orientamenti in un secondo, il sistema considera questo un ciclo di rotazione e applica l'override. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Impedisce il letterbox disattivando l'impostazione di richiesta di orientamento Ignora del produttore del dispositivo. | |
API Sandbox | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Impedisce di modificare il comportamento delle API di visualizzazione. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Forza le API Display nell'app a restituire i limiti dell'app. Le API display restituiscono limiti dell'area di visualizzazione, ma a volte l'app presume che le API display restituiscano limiti dell'app, causando problemi con l'interfaccia utente. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Forza le API View utilizzate nell'app a restituire i limiti dell'app. Le API View restituiscono limiti dell'area di visualizzazione, ma a volte l'app presume che le API View restituiscano limiti dell'app, causando problemi con l'interfaccia utente. |
|
Compatibilità fotocamera | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Disattiva la rotazione forzata. Per impostazione predefinita, tutte le app della fotocamera con orientamento fisso vengono ruotate forzatamente quando è aperta l'anteprima della fotocamera. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Rimuove l'aggiornamento forzato predefinito applicato quando viene eseguita la rotazione forzata dell'anteprima della fotocamera. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Cambia l'aggiornamento forzato in un aggiornamento soft quando viene forzata la rotazione dell'anteprima della fotocamera, che aiuta a mantenere lo stato durante la rotazione forzata. Per impostazione predefinita, Android applica un aggiornamento forzato quando viene forzata la rotazione dell'anteprima della fotocamera. L'aggiornamento forzato può causare problemi per cui alcune app perdono lo stato o si oscurano, a seconda di come hanno memorizzato lo stato precedente nella cache. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Consente di ritagliare il buffer dell'immagine della fotocamera anteriore interna. Se l'override è disattivato, il ritaglio della fotocamera anteriore interna viene rimosso e il campo visivo dell'anteprima della fotocamera viene aumentato. Per impostazione predefinita su Pixel Fold, il sistema ritaglia l'anteprima di tutte le app della fotocamera quando viene usata la fotocamera anteriore interna. | |
Vari | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Impedisce che l'app venga oscurata quando perde lo stato attivo in modalità schermo diviso. L'app attende lo stato attivo prima di tracciare i contenuti dell'app e questo potrebbe causare il blocco o l'oscuramento dell'app. L'override consente ad Android di inviare all'app un evento attivo falso, che segnala a quest'ultima di iniziare a tracciare di nuovo i contenuti. |
APP FORCE_RESIZE
Forza il ridimensionabile dei pacchetti a cui viene applicato l'override. Non cambia la possibilità di attivare o meno la modalità multi-finestra per l'app, ma consente il ridimensionamento dell'app senza dover attivare la modalità di compatibilità delle dimensioni quando lo schermo viene ridimensionato.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo android:resizeableActivity
su true o imposta il flag di metadati android.supports_size_changes
su true (per supportare il ridimensionamento durante la disattivazione della modalità multi-finestra con android:resizeableActivity
impostato su false) nel manifest dell'app.
Come ottimizzare le app
Utilizza layout adattabili/adattivi per consentire alle app di adattarsi a tutte le dimensioni e proporzioni del display. Vedi Supporto di schermi di dimensioni diverse.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override e rendere l'app ridimensionabile:
adb shell am compat enable FORCE_RESIZE_APP <package>
Per rimuovere l'override:
adb shell am compat disable FORCE_RESIZE_APP <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
APP FORCE_NON_RESIZE_APP
Forza la non ridimensionabile dei pacchetti a cui viene applicata la sostituzione e attiva la modalità di compatibilità delle dimensioni in caso di modifiche alla configurazione.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta sia l'attributo android:resizeableActivity
sia il flag di metadati android.supports_size_changes
su false nel file manifest dell'app e dichiara una limitazione relativa all'orientamento o alle proporzioni.
Come ottimizzare le app
Per tutte le app che si comportano bene se ridimensionate devono essere impostati su true android:resizeableActivity
o android.supports_size_changes
. Le altre app dovrebbero essere migliorate affinché si comportino bene quando vengono ridimensionate. Vedi android:resizeableActivity.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override e rendere l'app non ridimensionabile:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
Per rimuovere l'override:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO
Le limitazioni per tutti i trattamenti che forzano un determinato formato minimo.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta android:minAspectRatio
a livello di attività o di app.
Come ottimizzare le app
Non impostare restrizioni per le proporzioni nella tua app. Assicurati che l'app supporti dimensioni dello schermo diverse. Utilizza le classi di dimensioni delle finestre per supportare layout diversi in base alla quantità di spazio della tua app sullo schermo. Consulta l'API Compose WindowSizeClass
e l'API View WindowSizeClass
.
Come disattivare o disattivare l'override
Specifica una limitazione delle proporzioni o imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Limita i trattamenti che forzano una determinata proporzione minima per le attività con orientamento solo verticale. È abilitato per impostazione predefinita ed ha effetto solo se è abilitato anche OVERRIDE_MIN_ASPECT_RATIO
.
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come ottimizzare le app
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come disattivare o disattivare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Flag della proprietà per modificare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
Imposta le proporzioni minime dell'attività su un valore medio (3:2)
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come ottimizzare le app
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come disattivare o disattivare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Flag della proprietà per modificare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Imposta le proporzioni minime dell'attività su un valore grande (16:9)
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come ottimizzare le app
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come disattivare o disattivare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Flag della proprietà per modificare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_CON_SCHERMO_SPLIT
Consente di attivare l'utilizzo delle proporzioni dello schermo diviso. Consente a un'app di utilizzare tutto lo spazio disponibile in modalità schermo diviso, evitando il letterbox.
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come ottimizzare le app
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come disattivare o disattivare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Flag della proprietà per modificare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_SCHERMO INTERO
Disattiva la sostituzione delle proporzioni minime in modalità schermo intero verticale per utilizzare tutto lo spazio disponibile sullo schermo.
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come ottimizzare le app
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Come disattivare o disattivare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
Flag della proprietà per modificare l'override
Vedi OVERRIDE_MIN_ASPECT_RATIO.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Attiva l'orientamento verticale per tutte le attività del pacchetto. A meno che OVERRIDE_ANY_ORIENTATION non sia abilitato, l'override viene utilizzato solo quando non è stato specificato nessun altro orientamento fisso dall'attività.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo manifest activity:screenOrientation
o utilizza l'API Activity#setRequestedOrientation
.
Come ottimizzare le app
L'app deve supportare tutti gli orientamenti. Una modifica dell'orientamento è una modifica della configurazione, che può essere gestita in due modi: per consentire al sistema di eliminare e ricreare l'app o gestire personalmente le modifiche alla configurazione. Se gestisci autonomamente le modifiche alla configurazione, lo stato dell'app può essere conservato utilizzando un ViewModel
. In casi molto limitati, puoi decidere di bloccare l'orientamento solo sui display piccoli, anche se così facendo potresti non scalare e consentire all'utente di ruotare l'app a seconda delle esigenze. Su Android 12L e versioni successive, l'orientamento fisso può essere sostituito dalla configurazione del dispositivo. Per ulteriori informazioni sulla gestione delle modifiche alla configurazione e sul supporto di tutti gli orientamenti, vedi Gestire le modifiche alla configurazione, Panoramica di ViewModel e Orientamento delle app limitato sui telefoni ma non sui dispositivi con schermi grandi.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_UNDEFINED_ORIENTATION_A_NOSENSOR
Consente di attivare l'orientamento nosensor per tutte le attività del pacchetto. A meno che OVERRIDE_ANY_ORIENTATION non sia abilitato, l'override viene utilizzato solo quando non è stato specificato nessun altro orientamento fisso dall'attività.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo manifest activity:screenOrientation
o utilizza l'API Activity#setRequestedOrientation
.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Attiva l'orientamento reverseLandscape per tutte le attività del pacchetto. A meno che OVERRIDE_ANY_ORIENTATION non sia abilitato, l'override viene utilizzato solo quando non è stato specificato nessun altro orientamento fisso dall'attività.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo manifest activity:screenOrientation
o utilizza l'API Activity#setRequestedOrientation
.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ANY_ORIENTATION
Consente di eseguire gli override di OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR e OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE per eseguire l'override di qualsiasi orientamento.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo manifest activity:screenOrientation
o utilizza l'API Activity#setRequestedOrientation
.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ORIENTATION_SOLO_PER_FOTOCAMERA
I limiti di OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR e OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE vengono applicati solo quando la connessione della videocamera è attiva.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo manifest activity:screenOrientation
o utilizza l'API Activity#setRequestedOrientation
.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_USE_DISPLAY_LANDSCAPE_ORIENTATION_NATURAL
Limita l'orientamento del display all'orientamento naturale orizzontale quando si verificano le seguenti condizioni:
- Attività a schermo intero
- La proprietà del componente
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
non è attivata - Il produttore del dispositivo ignora l'impostazione della richiesta di orientamento attivata per il display
- L'orientamento naturale del display è orizzontale
In che modo le app possono ottenere lo stesso risultato dell'override
Non applicabile. Il problema dovrebbe essere risolto nella logica dell'applicazione.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Consente di attivare le norme di conformità che ignorano l'aggiornamento dell'orientamento dell'app in risposta alla chiamata dell'app Activity#setRequestedOrientation()
quando l'app viene riavviata o ha un trattamento di compatibilità della fotocamera attivo.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta il flag proprietà PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
su true.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Consente di attivare il criterio di compatibilità che ignora l'orientamento richiesto da un'app in risposta all'app che chiama Activity#setRequestedOrientation()
più di due volte in un secondo se un'attività non presenta delle opzioni per l'orientamento fisso.
In che modo le app possono ottenere lo stesso risultato dell'override
Non applicabile. Il problema dovrebbe essere risolto nella logica dell'applicazione.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Esclude i pacchetti dal comportamento di richiesta di orientamento ignora che può essere attivato dai produttori di dispositivi su un'area di visualizzazione o sull'intero display.
In che modo le app possono ottenere lo stesso risultato dell'override
Non applicabile. Il problema dovrebbe essere risolto nella logica dell'applicazione.
Come ottimizzare le app
Vedi OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Come disattivare o disattivare l'override
Nessuna disattivazione. La disattivazione dell'override può essere pericolosa se l'app non è compatibile con un dispositivo per il quale è abilitata l'impostazione della richiesta di orientamento per ignorare il produttore del dispositivo. Contatta i relazioni con gli sviluppatori Android per disattivare l'override.
Flag della proprietà per modificare l'override
Nessun flag di proprietà per questa sostituzione.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
NEVER_SANDBOX_DISPLAY_APIS
Obbliga i pacchetti a non applicare mai il sandboxing dell'API Display
per un'attività in modalità letterbox o in modalità di compatibilità dimensioni. Le API Display
continuano a fornire limiti dell'area di visualizzazione
In che modo le app possono ottenere lo stesso risultato dell'override
Dichiara le attività ridimensionabili impostando l'attributo manifest android:resizeableActivity
su true o il flag dei metadati android.supports_size_changes
su true.
Come ottimizzare le app
Le app che dichiarano di essere completamente ridimensionabili non devono mai fare affidamento sulle dimensioni di visualizzazione per posizionare gli elementi dell'interfaccia utente. Esegui la migrazione della tua app alle API aggiornate che forniscono WindowMetrics
. Se utilizzi Jetpack Compose, sfrutta l'API di WindowSizeClass
per disegnare l'UI in base alla porzione di schermo dell'app a disposizione sul display corrente. Vedi Supporto di schermi di dimensioni diverse.
Come disattivare o disattivare l'override
Nessuna disattivazione. Esegui la migrazione dalle API deprecate.
Flag della proprietà per modificare l'override
Nessun flag di proprietà per questa sostituzione.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
Per rimuovere l'override:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
API ALWAYS_SANDBOX_DISPLAY_DISPLAY
Forza l'applicazione sempre del sandboxing dell'API Display
, indipendentemente dalla modalità di windowing. Le API Display
forniscono sempre i limiti dell'app.
In che modo le app possono ottenere lo stesso risultato dell'override
Dichiara le attività non ridimensionabili impostando l'attributo android:resizeableActivity
su false o il flag dei metadati android.supports_size_changes
su false.
Come ottimizzare le app
Le app che dichiarano di essere completamente ridimensionabili non devono mai fare affidamento sulle dimensioni di visualizzazione per posizionare gli elementi dell'interfaccia utente. Esegui la migrazione della tua app dalle API deprecate e aggiornate che forniscono WindowMetrics
. Vedi WindowMetricsCalculator
.
Come disattivare o disattivare l'override
Nessuna disattivazione. Esegui la migrazione dalle API deprecate.
Flag della proprietà per modificare l'override
Nessun flag di proprietà per questa sostituzione.
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Per rimuovere l'override:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Forza la limitazione tramite sandbox delle seguenti API di View
ai limiti di attività:
In che modo le app possono ottenere lo stesso risultato dell'override
Risolvi il problema nel codice dell'applicazione utilizzando API che forniscono i limiti della finestra dell'app e gli offset relativi alla finestra dell'app, anziché i limiti della visualizzazione del dispositivo e gli offset relativi al display del dispositivo.
Come ottimizzare le app
Le app dovrebbero usare le API View
, tenendo conto della possibilità che all'app vengano applicate modalità letterbox e multi-finestra. Vedi WindowMetricsCalculator
.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Disabilita la rotazione forzata. Migliora l'esperienza utente in alcune app.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta il flag proprietà PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
su false.
Come ottimizzare le app
Non fare affidamento sull'orientamento del sensore della fotocamera memorizzato nella cache o sulle informazioni del dispositivo. Per indicazioni sulla compatibilità della fotocamera, consulta gli articoli Introduzione al mirino della fotocamera e Supporto di superfici ridimensionabili nell'app Fotocamera.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
su true.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override, che rimuove la rotazione forzata:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Per rimuovere l'override, che consente l'esecuzione della rotazione forzata:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
AGGIORNA_CAMERA_OVERRIDE_COMPAT_DISABLE
Disattiva l'aggiornamento dell'attività dopo la rotazione forzata. Migliora l'esperienza utente nelle app quando l'aggiornamento causa la perdita di stato.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta il flag proprietà PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
su false.
Come ottimizzare le app
Non fare affidamento sull'orientamento del sensore della fotocamera memorizzato nella cache o sulle informazioni del dispositivo. Per indicazioni sulla compatibilità della fotocamera, consulta gli articoli Introduzione al mirino della fotocamera e Supporto di superfici ridimensionabili nell'app Fotocamera.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
su true.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override, che rimuove l'aggiornamento delle attività:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Per rimuovere l'override, che consente l'aggiornamento dell'attività:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
Consente di impostare i pacchetti per l'aggiornamento delle attività utilizzando onResume()
→ onPause()
→ onResume()
ciclo anziché onResume()
→ onStop()
→ onResume()
dopo che la videocamera è compatibile con la rotazione forzata.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta il flag proprietà PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
su true.
Come ottimizzare le app
Non fare affidamento sull'orientamento del sensore della fotocamera memorizzato nella cache o sulle informazioni del dispositivo. Per indicazioni sulla compatibilità della fotocamera, consulta gli articoli Introduzione al mirino della fotocamera e Supporto di superfici ridimensionabili nell'app Fotocamera.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_CAMERA_LANDSCAPE_A_PORTRAIT
Forza il ritaglio dell'output della fotocamera nell'orientamento opposto quando l'orientamento verticale della fotocamera non si allinea con l'orientamento naturale del dispositivo. Molte app non sono in grado di gestire questa situazione e mostrano altrimenti immagini allungate.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta il flag proprietà PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
su true.
Come ottimizzare le app
Non fare affidamento sull'orientamento del sensore della fotocamera memorizzato nella cache o sulle informazioni del dispositivo. Per indicazioni sulla compatibilità della fotocamera, consulta gli articoli Introduzione al mirino della fotocamera e Supporto di superfici ridimensionabili nell'app Fotocamera.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
su false.
Flag della proprietà per modificare l'override
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override, che applica il ritaglio della fotocamera anteriore interna:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Per rimuovere l'override, che rimuove il ritaglio della fotocamera anteriore interna:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_DISABLE_MEDIA_PROIEZIONE_SINGLE_OPZIONE_APP
Impedisce alle app di disattivare la condivisione schermo delle app (vedi Proiezione di contenuti multimediali).
Implementata quando le app fanno un uso improprio dell'API createConfigForDefaultDisplay()
per forzare l'acquisizione a schermo intero e mettere a rischio la privacy dell'utente esponendo i contenuti delle notifiche, che vengono acquisiti a schermo intero ma non con la condivisione schermo delle app, e tutte le app indipendentemente dalla modalità windowing.
In che modo le app possono ottenere lo stesso risultato dell'override
Consente il comportamento predefinito di proiezione dei contenuti multimediali (implementato in Android 14, livello API 34, con createScreenCaptureIntent()
), che permette agli utenti di decidere se condividere lo schermo intero o una singola finestra dell'app indipendentemente dalla modalità windowing. In alternativa, chiama
createScreenCaptureIntent(MediaProjectionConfig)
con un
argomento MediaProjectionConfig
restituito da una chiamata a
createConfigForUserChoice()
.
Come ottimizzare le app
Consente agli utenti di scegliere se condividere l'intero display del dispositivo o una finestra dell'app durante la proiezione di contenuti multimediali (il comportamento predefinito è Android 14).
Rendi ridimensionabile l'app (resizeableActivity="true"
) per supportare la modalità multi-finestra.
Come disattivare o disattivare l'override
A causa della gravità della privacy degli utenti, nella tua app non è possibile disattivare o disattivare l'override.
Flag della proprietà per modificare l'override
Nessuna.
comandi adb per testare l'override
Per applicare l'override, che annulla la disattivazione della condivisione dello schermo parziale da parte dell'app (ovvero, consente la condivisione dello schermo parziale):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Per rimuovere l'override, che consente di disattivare la condivisione dello schermo parziale da parte dell'app:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Consente di attivare l'invio di una messa a fuoco falsa per le app non focalizzate in modalità schermo diviso. Alcuni motori di gioco attendono di concentrarsi prima di disegnare i contenuti delle app; pertanto, la falsa messa a fuoco aiuta le app a evitare di rimanere oscurate quando vengono ripristinate e non sono ancora state impostate.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta il flag proprietà PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
su true.
Come ottimizzare le app
Puoi evitare questo problema se l'app gestisce più orientamenti e modifiche alla configurazione. Prepara la tua app con uno schermo di grandi dimensioni seguendo le linee guida sulla qualità delle app per schermi grandi.
Se utilizzi il motore grafico Unity, esegui l'upgrade alla versione 2019.4.40 o successive ed esporta di nuovo il gioco. Mantieni selezionata l'opzione Resizable Window
nelle impostazioni di Android Player.
Come disattivare o disattivare l'override
Imposta il flag proprietà PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
su false.
Flag della proprietà per modificare l'override
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Per rimuovere l'override:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Nota: i comandi applicano o rimuovono l'override solo temporaneamente.
Risorse aggiuntive
- Norme sulla qualità delle app su schermi grandi
- Norme sulla qualità essenziali delle app