Android attiva una modalità di compatibilità per le app che dichiarano l'orientamento o limitazioni di ridimensionabilità. La modalità di compatibilità garantisce un comportamento accettabile dell'app su dispositivi con schermi di grandi dimensioni e telefoni pieghevoli a conchiglia, ma con un'usabilità non ottimale.
Gli override per app consentono ai produttori di dispositivi di modificare comportamento delle app per migliorare l'esperienza utente o impedire che le app si interrompano dispositivi specifici.
Dispositivi di riferimento
I seguenti dispositivi potrebbero richiedere override per app a causa di insoliti configurazioni non ben supportate dalle app:
- Tablet: l'orientamento naturale di alcuni tablet, come Pixel Tablet,
orizzontale. Un dispositivo è nel suo orientamento naturale quando
Resi:
Display#getRotation()
Surface.ROTATION_0
. Se le app presuppongono cheROTATION_0
sia in verticale, i layout dell'app e l'anteprima della fotocamera potrebbero non corrispondere al display del dispositivo. - Pieghevoli in orizzontale:alcuni dispositivi pieghevoli, come Pixel Fold, sono in orientamento verticale quando è piegato e orientamento orizzontale quando è aperto. Se le app presuppongono che l'orientamento non piegato sia verticale, sfarfallio problemi di loop o di layout.
- Telefoni a conchiglia pieghevoli:i telefoni a conchiglia aperti sono in genere in verticale orientamento. Una volta piegati, però, gli smartphone di solito hanno un piccolo display orientamento orizzontale. Le app devono identificare e soddisfare le diverse orientamenti dei display.
Problemi comuni di compatibilità
Le app presentano problemi di compatibilità più spesso a causa dell'orientamento dell'app restrizioni, ridimensionabilità e proporzioni, gestione errata delle l'orientamento dell'anteprima della fotocamera e l'uso improprio delle API.
Letterboxing
Il Letterbox posiziona l'app al centro dello schermo oppure, su schermi di grandi dimensioni, da un lato all'altro per facilitare l'accesso. Opaca (barre a tinta unita o sfocato) riempiono l'area di visualizzazione inutilizzata lungo i lati o in alto e nella parte inferiore dell'app.
Il Letterbox è spesso utilizzato sui dispositivi con schermi di grandi dimensioni perché le dimensioni e le proporzioni del display del dispositivo sono solitamente diverse da quelle delle smartphone compatibili con la maggior parte delle app.
Problema
L'app non supporta tutte le configurazioni di visualizzazione perché sono state corrette orientamento di apertura, proporzioni fisse o non ridimensionabile.
Le impostazioni di configurazione che controllano l'orientamento e la ridimensionabilità dell'app includono: seguenti:
screenOrientation
: specifica 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 dimensioni diverse. Su Android 11 (livello API 30) e inferiore, specifica se le app supportano la modalità multi-finestra. Attivato Android 12 (livello API 31) e versioni successive specifica se le app supportano modalità multi-finestra su schermi piccoli (compatta classe dimensioni finestra). Su Android 12 e versioni successive, le app Supporto della modalità multi-finestra su schermi di grandi dimensioni (finestra media o espansa). size) a prescindere da questa impostazione.maxAspectRatio
: specifica le proporzioni massime supportate dall'app. Solo le app conresizeableActivity
impostato sufalse
possono impostamaxAspectRatio
.minAspectRatio
: specifica le proporzioni minime supportate dall'app. Solo le app conresizeableActivity
impostato sufalse
possono impostaminAspectRatio
.
Ottimizzazione
L'app deve supportare tutti i dispositivi e il display in modalità multi-finestra orientamenti e dimensioni. Rimuovi tutti gli orientamenti e le proporzioni fisse limitazioni dai layout e dal file manifest dell'app.
Soluzione alternativa per la compatibilità
Se un'app con orientamento o proporzioni fisse viene eseguita in una finestra in cui l'app non supporta direttamente la dimensione o l'orientamento della finestra, Android l'app in formato letterbox per preservare la continuità.
a partire da Android 12 (livello API 31) e poi con 12L (livello API 32), la piattaforma applica una serie di miglioramenti alle app letterbox. Dispositivo i produttori implementano i miglioramenti dell'interfaccia utente. Non è necessario alcun intervento da parte tua sviluppo della tua app per trarre vantaggio dai miglioramenti.
Android 12 (livello API 31) introduce i seguenti miglioramenti estetici, che che possono essere configurati dai produttori di 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 alla sono semitrasparenti, pertanto le icone delle barre sono sempre visibili sfondo letterbox.
- Proporzioni configurabili: le proporzioni dell'app possono essere modificate. per migliorare l'aspetto dell'app.
12L (livello API 32) aggiunge i seguenti miglioramenti funzionali:
Posizionamento configurabile: su schermi di grandi dimensioni, i produttori di dispositivi possono posiziona l'app sul lato destro o sinistro del display, un'interazione più semplice.
Tasto di riavvio rinnovato:i produttori dei dispositivi possono attivare il riavvio. pulsante per la modalità di compatibilità dimensioni con un nuovo look per migliorare il riconoscimento da parte degli utenti.
Android 13 (livello API 33) aggiunge una finestra di dialogo informativa per gli utenti sul posizionamento app letterbox sullo schermo o contenente letterbox in modalità schermo diviso:
Modalità di compatibilità delle dimensioni
La modalità di compatibilità delle dimensioni è letterbox che include un controllo di riavvio. La consente agli utenti di riavviare l'app e visualizzare di nuovo il display. Richiami Android modalità di compatibilità delle dimensioni per le app non ridimensionabili. Quando l'attività passa a un contenitore display incompatibile con dimensioni, il sistema può ridimensionare l'app per riempire il display del dispositivo almeno una dimensione.
Le modifiche alla configurazione del dispositivo che possono attivare la modalità di compatibilità delle dimensioni includono: le seguenti:
- Rotazione del dispositivo
- Dispositivo pieghevole che si piega o si apre
- Passare dalla modalità di visualizzazione a schermo intero a quella a schermo diviso e viceversa
Problema
La modalità di compatibilità delle dimensioni si applica in genere alle attività che sono limitate in orientamento o proporzioni e sono configurati (o determinati dal sistema) per non sarà ridimensionabile.
La tua app è considerata ridimensionabile e non verrà posizionata modalità di compatibilità, se soddisfa uno dei seguenti criteri:
- È ridimensionabile con
resizeableActivity="true"
- Supporta la modalità Picture in picture (PIP)
- È incorporato
- Ha l'override per app
FORCE_RESIZE_APP
applicato da Il produttore del dispositivo (le proprietà impostate dall'app vengono ignorate)
Se la tua app non soddisfa nessuna delle condizioni, viene considerata non ridimensionabili e potrebbero essere posizionate in modalità di compatibilità delle dimensioni.
Ottimizzazione
L'app deve supportare tutte le dimensioni di visualizzazione. Rendi la tua app ridimensionabile impostando
Attributo android:resizeableActivity
di <activity>
o <application>
a true
nel
manifest dell'app. Progetta layout reattivi/adattivi per la tua app. Per ulteriori informazioni
le informazioni, vedi
Supporto di schermi di dimensioni diverse e Supporto
modalità multi-finestra.
Soluzione alternativa per la compatibilità
Android mette un'app in modalità di compatibilità delle dimensioni quando il sistema determina la visualizzazione dell'app in formato letterbox può essere migliorata ridimensionando l'app in modo che finestra in almeno una dimensione. Il sistema visualizza un controllo di riavvio che ricrea il processo dell'app, ricreando l'attività e ridisegnando display. Vedi anche Panoramica su processi e thread.
Anelli sfarfallanti
Quando un'app non supporta tutti gli orientamenti del display, potrebbe verificarsi richiedere nuovi orientamenti quando si verifica una modifica della configurazione, creando ciclo infinito che fa sfarfallare il display o l'app ruota all'infinito.
Problema
Su Android 12 (livello API 31) e versioni successive, i produttori di dispositivi possono configurare
sui dispositivi di ignorare le limitazioni di orientamento specificate dalle app
applicare le modalità di compatibilità. Ad esempio, un dispositivo pieghevole potrebbe ignorare un
android:screenOrientation="portrait"
dell'attività
quando l'attività viene visualizzata nelle dimensioni orizzontali del tablet del dispositivo,
schermo interno.
Se le limitazioni di orientamento di un'app vengono ignorate, l'app può eseguire in modo programmatico
impostane l'orientamento richiamando
Activity#setRequestedOrientation()
La chiamata
attiva il riavvio dell'app se non gestisce le modifiche alla configurazione (vedi
Gestire le modifiche alla configurazione). Dopo il
riavviare, i limiti di orientamento dell'app vengono nuovamente ignorati, l'app si ripete
la chiamata a setRequestedOrientation()
, la chiamata attiva il riavvio dell'app e
e così via in un loop che si autoperpetra.
Un altro modo per farlo è quando
orientamento naturale (il normale orientamento
determinato da Android) dello schermo di un dispositivo è orizzontale (ovvero la chiamata
Resi in Display#getRotation()
Surface.ROTATION_0
quando il dispositivo è in orizzontale
). In passato, le app presupponevano che Display.getRotation() =
Surface.ROTATION_0
indichi che il dispositivo sia in orientamento verticale, ma non è così
come accade sempre, ad esempio sullo schermo interno di alcuni dispositivi pieghevoli
su alcuni tablet.
Un'app con orientamento orizzontale su un display interno pieghevole potrebbe controllare le
rotazione dello schermo, ricevi un valore di ROTATION_0
, assume l'orientamento naturale
del dispositivo è in verticale e chiama
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
per riconfigurare il layout dell'app. Dopo il riavvio dell'app (in orizzontale
orientamento), potrebbe controllare di nuovo la rotazione dello schermo, ricevere il valore
ROTATION_0
, chiama
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
e
per continuare il loop infinito.
Ottimizzazione
Le app non devono:
- Imposta un orientamento predefinito con
Activity#setRequestedOrientation()
nella l'attivitàonCreate()
perché la richiesta di orientamento può essere attivato 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, ad esempio
come
Display#getRotation()
, la presenza di unFoldingFeature
o API ritirate.
Soluzione alternativa per la compatibilità
Android ignora le chiamate a Activity#setRequestedOrientation()
nei seguenti
situazioni seguenti:
L'attività è già stata riavviata da una precedente chiamata al metodo o è stato abilitato il trattamento forzato di rotazione della fotocamera (vedi Fotocamera anteprima 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, che indica che si è verificato un loop. Delle due richieste nel loop, Android utilizza quella che ingrandisce 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 il mirino) delle app della fotocamera potrebbe essere disallineata o distorta su tablet, laptop e display pieghevoli.
Problema
Il Documento di definizione della compatibilità Android afferma che: il sensore fotografico della fotocamera "DEVE essere orientato in modo che la dimensione lunga del si allinea alla dimensione lunga dello schermo."
Le app spesso presuppongono che l'orientamento del dispositivo e l'orientamento del sensore della fotocamera siano verticale, un presupposto ragionevole per i telefoni cellulari standard. Ma l'orientamento naturale di tablet e laptop e i sensori della fotocamera possono essere in un paesaggio. Inoltre, nuovi fattori di forma come i pieghevoli possono avere molteplici orientamenti e diversi sensori della fotocamera con orientamenti diversi.
Avvio di un'attività con un orientamento della fotocamera non previsto dall'app o il passaggio da una fotocamera all'altra o da uno schermo del dispositivo all'altro (per i pieghevoli) può causare un'anteprima della fotocamera disallineata o distorta.
Ottimizzazione
Le app Fotocamera devono identificare e gestire correttamente l'orientamento e la fotocamera del dispositivo orientato il sensore per mostrare un'anteprima della fotocamera allineata e scalata correttamente. Le app devono calcolare la rotazione del dispositivo, la rotazione del sensore e lo schermo o la finestra proporzioni e applicare i risultati all'anteprima della fotocamera. Per dettagli indicazioni, vedi Anteprima della fotocamera e Presentazione della fotocamera Mirino.
Soluzione alternativa per la compatibilità
Un dispositivo è in orientamento naturale quando Display#getRotation()
restituisce Surface.ROTATION_0
. Il sistema calcola
CameraCharacteristics.SENSOR_ORIENTATION
dall'orientamento naturale del dispositivo. Android allinea la finestra verticale di
app limitate per i contenuti verticali con l'orientamento naturale del dispositivo, che
è ciò che si aspetta la maggior parte delle app. Android ritaglia l'immagine del sensore della fotocamera anche quando
l'orientamento del sensore è orizzontale e l'anteprima della fotocamera è verticale. Lo specifico
Ecco alcune soluzioni alternative:
Forza la rotazione delle anteprime della fotocamera per le app con limitazioni per la visualizzazione in verticale: app limitati all'orientamento verticale prevedono l'orientamento naturale del dispositivo e l'orientamento del sensore della fotocamera in modo che sia verticale. Tuttavia, su Android 12 (livello API 31) e versioni successive, le app possono essere eseguite con diversi orientamenti del dispositivo se I produttori di dispositivi ignorano le specifiche di orientamento.
Quando alla fotocamera viene collegata un'app con limitazioni per l'orientamento verticale, Android forza la ruota l'app per allineare la finestra verticale dell'app con la natura l'orientamento del dispositivo.
Su alcuni tablet (vedi i dispositivi di riferimento), l'app la finestra verticale viene ruotata a schermo intero per allinearla all'orientamento naturale del dispositivo. L'app occupa lo schermo intero dopo l'applicazione forzata la rotazione.
Sullo schermo interno orizzontale dei pieghevoli (vedi riferimento dispositivi mobili), le attività in modalità solo verticale vengono ruotate orizzontale per allinearsi all'orientamento naturale aperto. L'app è letterbox dopo la rotazione forzata.
Ritaglio della fotocamera anteriore interna: il sensore della fotocamera anteriore interna su alcuni i pieghevoli sono in orientamento orizzontale. Oltre a forzare la rotazione anteprima della fotocamera sul display interno pieghevole, Android ritaglia la parte anteriore interna Campo visivo della videocamera (orizzontale) in modo che il sensore catturi l'immagine opposta l'orientamento del dispositivo.
Forza l'aggiornamento delle anteprime della fotocamera: il sistema scorre le attività in sequenza. i metodi
onStop()
eonStart()
(per impostazione predefinita) oonPause()
eonResume()
(applicato dal OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE l'override per app) dopo forza la rotazione per assicurarti che l'anteprima della fotocamera sia correttamente.Ridimensionamento delle proporzioni: il sistema modifica in modo dinamico le proporzioni delle forza la rotazione dell'anteprima della fotocamera a proporzioni minime più elevate, assicura che l'anteprima della fotocamera sia ridimensionata correttamente.
Gli sviluppatori di app possono ignorare queste soluzioni alternative se le app gestiscono l'anteprima della fotocamera in modo corretto. Consulta Override per app.
API utilizzate spesso in modo improprio
Poiché Android ha aggiunto il supporto di funzionalità quali la modalità multi-finestra e come i pieghevoli, le API legacy sono state ritirate e sostituite API aggiornate che funzionano per tutte le dimensioni di visualizzazione e per tutti i tipi di dispositivi fattori. Tuttavia, le API ritirate sono ancora disponibili per le versioni precedenti la compatibilità.
Alcune API View
sono progettate per scopi speciali che non sempre funzionano correttamente
riconosciuti dagli sviluppatori.
Problema
Gli sviluppatori continuano a utilizzare le API Display
deprecate e presuppongono erroneamente che
Le API restituiscono i limiti delle app anziché i limiti dell'area di visualizzazione del dispositivo. O sviluppatori
utilizzare erroneamente API di visualizzazione per scopi speciali per ottenere metriche generali della pubblicità display.
Il risultato sono calcoli errati durante il riposizionamento degli elementi UI dopo la finestra dell'app
di ridimensionamento degli eventi causando problemi di layout.
API display deprecate e utilizzate comunemente:
Per ulteriori informazioni, vedi Supporta la modalità multi-finestra.
API per le visualizzazioni utilizzate in modo improprio:
Ottimizzazione
Non fare mai affidamento sulle dimensioni di visualizzazione fisica per il posizionamento degli elementi UI. Esegui la migrazione del tuo
dell'app alle API in base a WindowMetrics
, inclusi i seguenti
WindowManager
API:
Piattaforma:
Jetpack:
Soluzione alternativa per la compatibilità
Due override modificano le API Display
deprecate e hanno usato in modo improprio le API View
per
restituisce i limiti dell'app:
ALWAYS_SANDBOX_DISPLAY_APIS
per Display
le API OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
per View
API. ALWAYS_SANDBOX_DISPLAY_APIS
viene applicato per impostazione predefinita anche a
le app idonee per la 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.MaterialComponents.Dialog
, possono
includi stili che rendono le attività trasparenti.
Le attività trasparenti non coprono tutto lo spazio di visualizzazione disponibile, il che rende difficili da gestire perché l'area di visualizzazione disponibile può cambiare in base modifiche alla configurazione, ad esempio rotazione e apertura e chiusura dei dispositivi modalità multi-finestra.
Problema
Un'attività trasparente deve essere conforme ai limiti della prima attività opaca sotto le attività trasparenti nello stack di attività delle attività. Tuttavia, un modello opaco che avvia una finestra di dialogo di autorizzazione può essere un trampoline (un'attività che avvia un'altra attività e poi scompare); e quindi il sistema non è in grado di determinare i limiti dell'attività del trampolino ha avviato l'attività della finestra di dialogo delle autorizzazioni trasparente.
Ottimizzazione
Le attività trasparenti ereditano i vincoli dall'opaco più in alto attività sottostanti nello stack di attività di un'attività. L'attività opaca deve essere disponibili per l'intero ciclo di vita dell'attività trasparente, dall'attività dalla creazione alla distruzione. Per questo motivo, non avviare richieste di autorizzazione da attività con trampolino.
Se un'attività con trampolino lancia una richiesta di autorizzazione, l'utente potrebbe non essere vedere la finestra di dialogo delle autorizzazioni perché l'attività del trampolino è stata viene eliminata prima che l'utente abbia avuto la possibilità di rispondere alla finestra di dialogo e le dimensioni e la posizione dell'attività della finestra di dialogo potrebbero essere state calcolate non è corretto.
Le app devono sempre avviare richieste di autorizzazione da attività che rimangono visibile finché l'utente non ha preso una decisione in merito all'autorizzazione.
Angoli arrotondati
Un'attività può essere trasparente a causa di uno stile che specifica lo sfondo trasparenza o poiché i contenuti dell'attività non riempiono di visualizzazione dei contenuti. Se lo spazio di visualizzazione disponibile è riempito da un'attività trasparente, automaticamente gli angoli arrotondati all'attività quando configurato dal produttore del dispositivo. Ma se un'attività trasparente (come una finestra di dialogo di autorizzazione) non riempie lo spazio disponibile, spetta a te decidere l'eventuale applicazione di angoli arrotondati.
Le finestre di dialogo di autorizzazione non occupano lo spazio di visualizzazione disponibile perché in genere utilizza LayoutParams.WRAP_CONTENT anziché LayoutParams.MATCH_PARENT.
Soluzione alternativa per la compatibilità
Mantieni visibili le attività che avviano le attività delle finestre di dialogo finché l'utente non lo ha ha risposto alla finestra di dialogo.
Il sistema garantisce che un'attività trasparente erediti tutti i vincoli la prima attività opaca sotto l'attività trasparente nello stack attività; inclusi i vincoli relativi a:
- Modalità di compatibilità delle dimensioni
- Orientamento
- Proporzioni
Giochi Unity
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 viene inserita modalità multi-finestra.
Problema
Unity ha aggiunto una Resizable Window
in Unity 2019.4 per supportare la modalità multi-finestra su Android. Tuttavia,
l'implementazione iniziale non ha reagito al ciclo di vita dell'attività in
la modalità multi-finestra, generando
UnityPlayer per sospendere la riproduzione quando l'app perde lo stato attivo. Il player ha visualizzato
schermata nera o l'ultimo frame bloccato del gioco. Il gameplay è stato ripreso solo quando
l'utente ha toccato lo schermo. Questo problema si verifica in molte app che utilizzano il motore Unity.
vengono visualizzati come una finestra nera in modalità multi-finestra.
Ottimizzazione
Esegui l'upgrade di Unity alla versione 2019.4.40 o successiva ed esporta nuovamente il tuo gioco. Mantieni il
Opzione Resizable Window
selezionata in
Impostazioni di Android Player, altrimenti
il gioco si interrompe quando non è a fuoco, anche se il gioco è completamente visibile
modalità multi-finestra.
Soluzione alternativa per la compatibilità
I produttori di dispositivi possono applicare
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
di override per app per fornire un falso evento attivo a un'app in
modalità multi-finestra. L'override consente all'attività di ridisegnare i contenuti
non sia oscurato.
Testare l'app per verificare la presenza di problemi di compatibilità
Per testare la tua app e capire come si comporta nei diversi fattori di forma, sfrutta le seguenti risorse:
- Streaming del dispositivo: per testare l'app su dispositivi di produzione (inclusi dispositivi di riferimento) ospitati nei data center Google, vedi Streaming di dispositivi Android, con tecnologia Firebase
- Emulatori in Android Studio Hedgehog: per informazioni sulla creazione per i dispositivi di riferimento, consulta Creare e gestire dispositivi virtuali
- Emulatore ridimensionabile di Android Studio: per informazioni sull'accesso ai servizi vedi Eseguire app sull'emulatore Android.
È 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(); }
Poi esegui un test per affermare il comportamento e assicurati che l'attività target non sia letterbox:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
L'ideale è eseguire questo tipo di test solo finché non viene superato e affermare che è occupano tutto lo spazio di visualizzazione disponibile per l'app. Testare 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. Per
Ad esempio, l'override di FORCE_RESIZE_APP
indica
sistema per bypassare la modalità di compatibilità delle dimensioni e ridimensionare l'app per adattarla al display
anche se resizeableActivity="false"
è
specificato nel file manifest dell'app.
I produttori di dispositivi applicano override per determinate app (o tutte le app) attive per determinati 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 per utente
Su Android 14 e versioni successive, un menu Impostazioni consente agli utenti di modificare l'aspetto percentuale di app. Dispositivi con schermi di grandi dimensioni come il riferimento dispositivi implementano il menu.
Il menu contiene un elenco di tutte le app installate sul dispositivo. Gli utenti scelgono e quindi imposta le proporzioni dell'app su 3:4, 1:1, a schermo intero o su un altro valore. configurate dal produttore del dispositivo. Gli utenti possono anche reimpostare le proporzioni su il valore predefinito dell'app, specificato nel file manifest dell'app.
Le app possono disattivare l'override della compatibilità impostando i seguenti tag PackageManager.Property
:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Per disattivare la sostituzione 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. 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 della compatibilità delle proporzioni utente eseguire l'override, aggiungere la proprietà al file manifest dell'app e impostare il valore su
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
L'opzione a schermo intero viene rimossa dall'elenco delle opzioni per le proporzioni in impostazioni del dispositivo. Gli utenti non potranno applicare la sostituzione a schermo intero a la tua app.
L'impostazione di questa proprietà su
true
non ha alcun effetto.
Ottimizza l'app per tutti gli schermi: non impostare restrizioni sulle proporzioni nelle la tua app. Utilizza le classi di dimensioni delle finestre per supportare diverse layout in base alla quantità di spazio di visualizzazione disponibile.
Override per app del produttore del dispositivo
I produttori di dispositivi applicano gli override in base alle singole app su determinati dispositivi. I dispositivi di riferimento potrebbero applicare alcuni override a una diverse app per impostazione predefinita.
Le app possono disattivare la maggior parte delle sostituzioni (consulta la sezione Per app override riportata di seguito).
Puoi testare la tua app con gli override attivati o disattivati utilizzando la compatibilità (vedi Strumenti del framework di compatibilità). Quando l'opzione è attiva, gli override vengono applicati all'intera app.
Puoi anche utilizzare Android Debug Bridge (adb) per attivare o disattivare gli override e determinare quali override applicare alla tua app.
Attiva o disattiva gli override nel seguente modo:
adb shell am compat enable/disable <override name/id> <package>
Per i dispositivi di riferimento, verifica quali override si applicano ai la tua app:
adb shell dumpsys platform_compat | grep <package name>
La seguente tabella elenca le sostituzioni disponibili insieme a indicazioni su come ottimizzare l'app in modo che non debba fare affidamento su override. Puoi aggiungere al file manifest dell'app per disattivare alcuni override.
Override per app | |||
---|---|---|---|
Tipo | Nome | ID | Descrizione |
Ridimensionabilità | FORCE_RESIZE_APP | 174042936 | Bypassa la modalità di compatibilità delle dimensioni per l'app quando viene modificata la configurazione. |
FORCE_NON_RESIZE_APP | 181136395 | Forza l'attivazione della modalità di compatibilità delle dimensioni nell'app in caso di modifiche alla configurazione. | |
Proporzioni | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Override 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 dell'override alle attività solo verticale. | |
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 in modo che si adattino al 50% delle dimensioni del display (o alle 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 è in verticale. | |
Orientamento | OVERRIDE_ANY_ORIENTATION | 265464455 | Consente di eseguire l'override di qualsiasi orientamento. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | Sostituisce le limitazioni di orientamento, ridimensionabilità e proporzioni. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Consente di sostituire l'orientamento su verticale quando un'attività ha un orientamento non definito. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Consente di sostituire l'orientamento su nosensor (utilizza l'orientamento naturale del dispositivo) quando un'attività ha un orientamento indefinito. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Ruota le app in modalità orizzontale di 180 gradi. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Limita l'ambito della sostituzione dell'orientamento al momento in cui l'app è connessa alla fotocamera. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Imposta il display sull'orientamento naturale orizzontale fisso quando un'attività è a schermo intero (anche in formato letterbox). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Ignora le richieste di orientamento dell'app per evitare loop infiniti 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 lo considera un ciclo infinito di rotazione e applica l'override. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Impedisce il letterbox disattivando l'impostazione della richiesta di orientamento che il produttore del dispositivo ignora. | |
API Sandbox | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Impedisce di modificare il comportamento delle API di visualizzazione. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Forza l'API Display nell'app a restituire i limiti dell'app. Le API Display restituiscono limiti dell'area di visualizzazione logici, ma a volte l'app presuppone che le API di Display restituiscano limiti dell'app, causando problemi nell'interfaccia utente. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Forza l'API View utilizzata nell'app a restituire i limiti dell'app. Le API View restituiscono limiti dell'area di visualizzazione logici, ma a volte l'app presuppone che le API di View restituiscano limiti dell'app, causando problemi nell'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 l'anteprima della fotocamera è aperta. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Rimuove l'aggiornamento forzato predefinito applicato quando viene forzata la rotazione dell'anteprima della fotocamera. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Imposta l'aggiornamento forzato su un aggiornamento leggero quando viene forzata la rotazione dell'anteprima della fotocamera, per preservare 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 di perdita dello stato o di oscuramento delle app, a seconda di come le app hanno memorizzato lo stato precedente nella cache. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Ritaglia il buffer dell'immagine della fotocamera anteriore interna. Se l'override viene disattivato, il ritaglio della fotocamera anteriore interna viene rimosso e il campo visivo dell'anteprima della fotocamera viene aumentato. Per impostazione predefinita, su alcuni pieghevoli (vedi i dispositivi di riferimento), il sistema ritaglia l'anteprima della fotocamera di tutte le app della fotocamera quando viene utilizzata 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 disegnarne i contenuti, causando il blocco o l'oscuramento dell'app. L'override consente ad Android di inviare un falso evento di stato attivo all'app, che indica all'app di iniziare di nuovo a tracciare i contenuti. |
APP_FORCE_RESIZE
Forza il ridimensionamento dei pacchetti a cui viene applicato l'override. No cambia se l'app può essere impostata in modalità multi-finestra, ma consente per ridimensionare senza attivare la modalità di compatibilità delle dimensioni quando lo schermo viene ridimensionato.
In che modo le app possono ottenere lo stesso risultato dell'override
Nel file manifest dell'app, imposta
Attributo android:resizeableActivity
a true
o a
supporta il ridimensionamento durante la disattivazione della modalità multi-finestra con
android:resizeableActivity=false
, imposta android.supports_size_changes
il flag di metadati su true
.
Come ottimizzare le app
Usare layout adattabili/adattivi per consentire alle app di adattarsi a tutte le dimensioni di visualizzazione proporzioni. Consulta 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 proprietà da modificare
<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 la sostituzione:
adb shell am compat disable FORCE_RESIZE_APP <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
FORCE_NON_RESIZE_APP
Obbliga i pacchetti a cui viene applicato l'override come non ridimensionabili e entra in modalità di compatibilità delle dimensioni quando modifichi la configurazione.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta sia l'attributo android:resizeableActivity
che
il flag di metadati android.supports_size_changes
per false
nel file manifest dell'app;
e dichiarare una limitazione di orientamento o proporzioni.
Come ottimizzare le app
Tutte le app che si comportano correttamente se ridimensionate dovrebbero avere
android:resizeableActivity
o android.supports_size_changes
impostati su true
.
Le altre app dovrebbero essere migliorate per comportarsi bene quando vengono ridimensionate. Consulta
android:resizeableActivity.
Come disattivare o disattivare l'override
Imposta il flag della proprietà PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
su
false
.
Flag proprietà da modificare
<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 la sostituzione:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_MIN_ASPECT_RATIO
Il gatekeeper per tutti gli override 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 app.
Come ottimizzare le app
Non impostare limitazioni relative alle proporzioni nella tua app. Assicurati che la tua app supporti
schermi di dimensioni diverse. Utilizzare le classi di dimensioni delle finestre
per supportare layout diversi in base alla quantità di spazio a disposizione dell'app
schermo. Vedi l'API Compose WindowSizeClass
e Visualizza l'API WindowSizeClass
.
Come disattivare o disattivare l'override
Specifica una limitazione per le proporzioni o imposta il flag della proprietà
Da PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
a false
.
Flag proprietà da modificare
<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 la sostituzione:
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 le impostazioni dell'app che forzano un determinato formato minimo per le attività
con orientamento solo verticale. Attivato per impostazione predefinita e 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 proprietà da modificare
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 la sostituzione:
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_MEDIO
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 proprietà da modificare
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 la sostituzione:
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 elevato (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 proprietà da modificare
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 la sostituzione:
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_WITH_SPLIT_SCREEN
Consente di attivare l'utilizzo delle proporzioni dello schermo diviso. Consente a un'app di utilizzare tutte le di 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 proprietà da modificare
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 la sostituzione:
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_FULLSCREEN
Disattiva la sostituzione delle proporzioni minime in modalità a schermo intero verticale per utilizzare tutte di 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 proprietà da modificare
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 la sostituzione:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ANY_ORIENTATION
Attiva le seguenti sostituzioni per eseguire l'override di qualsiasi orientamento:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta l'attributo del file manifest activity:screenOrientation
,
o utilizzare l'API Activity#setRequestedOrientation()
.
Come ottimizzare le app
L'app deve supportare tutti gli orientamenti. Per cambio di orientamento si intende
di configurazione, che può essere gestita in due modi: lasciando che
eliminare e ricreare l'app dal sistema oppure gestire le modifiche alla configurazione
per te. Se gestisci autonomamente le modifiche alla configurazione, lo stato dell'app può essere
conservati tramite ViewModel
. In casi molto limitati, puoi decidere di bloccare
orientato correttamente solo su display piccoli, anche se potrebbe non essere ridimensionato
consentendo all'utente di ruotare l'app in base alle esigenze. Su Android 12L e versioni successive,
l'orientamento fisso può essere sostituito
dalla configurazione del dispositivo. Per ulteriori informazioni
informazioni sulla gestione delle modifiche alla configurazione e sul supporto
orientamenti. Consulta Gestire le modifiche alla configurazione.
Panoramica di ViewModel e Orientamento app limitato su
ma non sui dispositivi con schermi grandi.
Come disattivare o disattivare l'override
Imposta il flag della proprietà
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
a false
.
Flag proprietà da modificare
<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 la sostituzione:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ANY_ORIENTATION_TO_USER
Consente all'app di riempire lo spazio di visualizzazione disponibile. Sostituisce qualsiasi orientamento,
ridimensionabilità e proporzioni specificate nel file manifest dell'app. Inoltre
ignora tutte le chiamate a
Activity#setRequestedOrientation()
In che modo le app possono ottenere lo stesso risultato dell'override
Non impostare il file manifest di
android:screenOrientation
oppure imposta l'attributo su"user"
.Impostare il manifest di
android:resizeableActivity
atrue
.Su schermi piccoli, per supportare il ridimensionamento delle app durante la disattivazione della modalità multi-finestra con
android:resizeableActivity=false
, imposta Flag di metadatiandroid.supports_size_changes
intrue
. Non impostareminAspectRatio
emaxAspectRatio
.
Come ottimizzare le app
Consenti alla tua app di supportare tutti gli orientamenti. non impostare un screenOrientation
nel file manifest dell'app. Supporta la ridimensionabilità delle app,
modalità multi-finestra e tutte le proporzioni di visualizzazione impostando la
Attributo android:resizeableActivity
nel file manifest dell'app a true
. Consulta
Supporto di schermi di dimensioni diverse.
Come disattivare o disattivare l'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Flag proprietà da modificare
Vedi OVERRIDE_ANY_ORIENTATION
.
Comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Per rimuovere la sostituzione:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Attiva l'orientamento verticale per tutte le attività nel pacchetto. A meno che OVERRIDE_ANY_ORIENTATION è 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
Vedi OVERRIDE_ANY_ORIENTATION
.
Come ottimizzare le app
Vedi OVERRIDE_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Flag proprietà da modificare
Vedi OVERRIDE_ANY_ORIENTATION
.
Comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Per rimuovere la sostituzione:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Attiva l'orientamento nosensor per tutte le attività in pacchetto. A meno che OVERRIDE_ANY_ORIENTATION non sia attiva, l'override viene utilizzato solo se non è stato impostato nessun altro orientamento fisso specificato dall'attività.
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Come ottimizzare le app
Vedi OVERRIDE_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Flag proprietà da modificare
Vedi OVERRIDE_ANY_ORIENTATION
.
Comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Per rimuovere la sostituzione:
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 inverso orizzontale per tutte le attività in del pacchetto. A meno che OVERRIDE_ANY_ORIENTATION non sia attiva, l'override viene utilizzato solo se non è stato impostato nessun altro orientamento fisso specificato dall'attività.
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Come ottimizzare le app
Vedi OVERRIDE_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Flag proprietà da modificare
Vedi OVERRIDE_ANY_ORIENTATION
.
Comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Per rimuovere la sostituzione:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_ORIENTATION_SOLO_PER_FOTOCAMERA
Limiti OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, e OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE le sostituzioni verranno applicate solo quando la connessione della videocamera è attiva.
In che modo le app possono ottenere lo stesso risultato dell'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Come ottimizzare le app
Vedi OVERRIDE_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Vedi OVERRIDE_ANY_ORIENTATION
.
Flag proprietà da modificare
Vedi OVERRIDE_ANY_ORIENTATION
.
Comandi adb per testare l'override
Per applicare l'override:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Per rimuovere la sostituzione:
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_NATURAL_ORIENTATION
Limita l'orientamento del display all'orientamento naturale orizzontale quando le seguenti condizioni sono soddisfatte:
- L'attività è a schermo intero
- Disattiva proprietà componente
L'app
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
non è attiva - L'impostazione che ignora la richiesta di orientamento del produttore del dispositivo è abilitata per Rete 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_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Imposta il flag della proprietà
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
a false
.
Flag proprietà da modificare
<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 la sostituzione:
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
Attiva il criterio di conformità che salta l'aggiornamento dell'orientamento dell'app in risposta all'app
chiamata Activity#setRequestedOrientation()
quando l'app
è in fase di riavvio o è in corso il trattamento delle compatibilità della fotocamera.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta flag proprietà
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
a true
.
Come ottimizzare le app
Vedi OVERRIDE_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Imposta flag proprietà
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
a false
.
Flag proprietà da modificare
<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 la sostituzione:
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
Attiva il criterio di compatibilità che ignora l'orientamento richiesto da un'app in
risposta all'app chiamando
Activity#setRequestedOrientation()
più di due volte
in un secondo se un'attività non presenta un letterbox per un 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_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Imposta flag proprietà
Da PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
a
false
.
Flag proprietà da modificare
<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 la sostituzione:
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 dalla possibilità di ignorare il comportamento della richiesta di orientamento che può essere abilitato dai produttori di dispositivi per un'area di visualizzazione o per l'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_ANY_ORIENTATION
.
Come disattivare o disattivare l'override
Nessuna disattivazione. La disattivazione dell'override può essere pericolosa se l'app non è compatibile con un dispositivo di cui il produttore ignora la richiesta di orientamento attivata. Contatta sviluppatore Android Relazioni per disattivare l'override.
Flag proprietà da modificare
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 la sostituzione:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
NEVER_SANDBOX_DISPLAY_APIS
Forza l'applicazione della sandbox dell'API Display
ai pacchetti
per un'attività in modalità letterbox o compatibilità dimensioni. Le API di Display
continuano a mostrare i limiti dell'area di visualizzazione.
In che modo le app possono ottenere lo stesso risultato dell'override
Dichiara le attività ridimensionabili impostando il valore
Attributo del file manifest android:resizeableActivity
a true
o il flag di metadati android.supports_size_changes
a 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 dell'app alle API aggiornate che
fornire WindowMetrics
. Se utilizzi Jetpack Compose, sfrutta i vantaggi della
API WindowSizeClass
per disegnare l'UI in base a quanto schermo
che l'app ha sul display corrente. Consulta
Classi di dimensioni delle finestre:
Come disattivare o disattivare l'override
Nessuna disattivazione. Esegui la migrazione dalle API deprecate.
Flag proprietà da modificare
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 la sostituzione:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
API DISPLAY_ALWAYS_SANDBOX_DISPLAY
Forza l'applicazione sempre della sandbox dell'API Display
ai pacchetti
indipendentemente dalla modalità windowing. Le API Display
forniscono sempre i limiti delle app.
In che modo le app possono ottenere lo stesso risultato dell'override
Dichiara le attività non ridimensionabili impostando il valore
android:resizeableActivity
a false
o l'attributo
il flag di metadati android.supports_size_changes
su false
.
Come ottimizzare le app
Le app che dichiarano di essere completamente ridimensionabili non devono mai basarsi sulle dimensioni di visualizzazione per
degli elementi UI. Esegui la migrazione dell'app dalle API deprecate a
API aggiornate che forniscono WindowMetrics
. Consulta
WindowMetricsCalculator
Come disattivare o disattivare l'override
Nessuna disattivazione. Esegui la migrazione dalle API deprecate.
Flag proprietà da modificare
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 la sostituzione:
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 sandbox delle seguenti API di View
dei pacchetti nei limiti di attività:
In che modo le app possono ottenere lo stesso risultato dell'override
Risolvi il problema nel codice dell'applicazione utilizzando le API che forniscono i limiti della finestra dell'app e degli offset rispetto a quella dell'app anziché ai limiti il display del dispositivo e gli offset relativi a quello del dispositivo.
Come ottimizzare le app
Le app dovrebbero usare le API View
, tenendo conto della possibilità di letterbox
e la modalità multi-finestra
applicate all'app. Consulta
WindowMetricsCalculator
Come disattivare o disattivare l'override
Imposta flag proprietà
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
a false
.
Flag proprietà da modificare
<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 la sostituzione:
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 su alcune app.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta flag proprietà
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
a false
.
Come ottimizzare le app
Non fare affidamento sull'orientamento del sensore della fotocamera nella cache o sulle informazioni del dispositivo. Per indicazioni sulla compatibilità delle videocamere, consulta Presentazione del mirino della fotocamera e Assistenza superfici ridimensionabili della videocamera .
Come disattivare o disattivare l'override
Imposta flag proprietà
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
a true
.
Flag proprietà da modificare
<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 la rotazione forzata:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Nota:i comandi applicano o rimuovono l'override solo temporaneamente.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
Disattiva l'aggiornamento dell'attività dopo la rotazione forzata. Migliora l'esperienza utente quando l'aggiornamento causa la perdita di stato nelle app.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta flag proprietà
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
a false
.
Come ottimizzare le app
Consulta OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Come disattivare o disattivare l'override
Imposta flag proprietà
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
a true
.
Flag proprietà da modificare
<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 dell'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
Imposta i pacchetti a cui viene applicato per aggiornare l'attività utilizzando un onResume()
→ onPause()
→ onResume()
ciclo anziché onResume()
→
onStop()
→ onResume()
dopo la rotazione forzata della compatibilità con la fotocamera.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta flag proprietà
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
a true
.
Come ottimizzare le app
Consulta OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Come disattivare o disattivare l'override
Imposta flag proprietà
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
a false
.
Flag proprietà da modificare
<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 la sostituzione:
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_TO_PORTRAIT
Forza il ritaglio dell'output della fotocamera nell'orientamento opposto in modalità verticale l'orientamento della fotocamera non si allinea con l'orientamento naturale del dispositivo. Molte app non gestirete questa situazione e visualizzate immagini allungate.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta flag proprietà
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
a true
.
Come ottimizzare le app
Consulta OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Come disattivare o disattivare l'override
Imposta flag proprietà
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
a false
.
Flag proprietà da modificare
<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_PROJECTION_SINGLE_APP_OPTION
Impedisce alle app di disattivare la condivisione della schermata delle app (vedi
Proiezione di contenuti multimediali). Implementata quando le app fanno un uso improprio
API createConfigForDefaultDisplay()
per forzare
acquisire a schermo intero e mettere a rischio la privacy dell'utente esponendone i contenuti.
di notifiche, che vengono acquisite a schermo intero ma non nella schermata dell'app
condivisione e tutte le app, indipendentemente dalla modalità windowing.
In che modo le app possono ottenere lo stesso risultato dell'override
Consenti il comportamento predefinito di proiezione multimediale (implementato in Android 14 e nell'API)
livello 34, con createScreenCaptureIntent()
),
che consente agli utenti di decidere se condividere lo schermo intero o una sola app
indipendentemente dalla modalità windowing. Oppure chiama
createScreenCaptureIntent(MediaProjectionConfig)
con un argomento MediaProjectionConfig
restituito da un
chiamata a createConfigForUserChoice()
.
Come ottimizzare le app
Consenti agli utenti di scegliere se condividere l'intero display del dispositivo o un'app durante la proiezione di contenuti multimediali, che a partire da Android 14 è il comportamento predefinito.
Rendi la tua app ridimensionabile (resizeableActivity="true"
) per
supportare la modalità multi-finestra.
Come disattivare o disattivare l'override
Data la gravità della privacy dell'utente, non è possibile disattivare o disattivare la tua app di questo override.
Flag proprietà da modificare
Nessuno.
Comandi adb per testare l'override
Per applicare l'override, che annulla la disattivazione della condivisione dello schermo parziale da parte dell'app (abilita la condivisione dello schermo parziale):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Per rimuovere l'override, che consente la disattivazione dello schermo parziale da parte dell'app condivisione:
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
Attiva l'invio di una falsa messa a fuoco per le app non pertinenti in modalità schermo diviso. Alcune i motori di gioco aspettano di concentrarsi prima di disegnare i contenuti dell'app; e così via, la funzione di impostazione dello stato attivo consente di evitare che le app rimangano oscurate quando vengono ripristinate pur mantenendo il focus.
In che modo le app possono ottenere lo stesso risultato dell'override
Imposta flag proprietà
Da PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
a
true
.
Come ottimizzare le app
Puoi evitare questo problema se l'app gestisce più orientamenti e la configurazione di Google Cloud cambia bene. Prepara l'app sullo schermo di grandi dimensioni seguendo le Norme sulla qualità delle app per schermi di grandi dimensioni.
Se utilizzi il motore grafico Unity, esegui l'upgrade alla versione 2019.4.40 o successiva e
esporta nuovamente il gioco. Mantieni l'opzione Resizable Window
selezionato in Android Player
impostazioni.
Come disattivare o disattivare l'override
Imposta flag proprietà
Da PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
a
false
.
Flag proprietà da modificare
<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 la sostituzione:
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 per schermi di grandi dimensioni
- Norme sulla qualità principali delle app