In Android 8.0, gli utenti potevano passare dalla rotazione automatica alla rotazione verticale e viceversa utilizzando un riquadro Impostazioni rapide o Impostazioni del display. Su Android 9, abbiamo aggiornato rotazione verticale per evitare rotazioni involontarie fissando rotazione dello schermo corrente anche se la posizione del dispositivo cambia. Gli utenti possono attivare manualmente la rotazione premendo un nuovo pulsante nella barra di navigazione. La modalità Ritratto è stata rinominata in blocco della rotazione e si attiva quando si ruota automaticamente è disattivata. La modalità di rotazione automatica non viene modificata.
Quando il dispositivo è in modalità di blocco della rotazione, gli utenti possono bloccare lo schermo su qualsiasi
rotazione supportata dall'attività superiore visibile (in base al sistema attuale
. Se l'attività principale può essere visualizzata in più rotazioni in
rotazione automatica, le stesse opzioni saranno disponibili
in modalità di rotazione bloccata,
con alcune eccezioni in base all'screenOrientation
dell'attività
dell'ambientazione.
La modalità di blocco della rotazione funziona mostrando un pulsante nella barra di navigazione quando viene ruotato il dispositivo
modifiche. A tale scopo, il sensore di orientamento del dispositivo deve rimanere attivo
anche quando la rotazione automatica è disattivata. La possibilità di toccare questo pulsante imposta in modo efficace la rotazione degli utenti
preferenza (Settings.System.USER_ROTATION
). WindowManager utilizza questa
la preferenza, insieme ad altri dettagli
sull'attività principale e sullo stato del sistema,
per cambiare la rotazione del sistema. WindowManager continua a utilizzare la rotazione degli utenti
preferenza quando decidi in quale rotazione eseguire il rendering del sistema
un'altra attività.
![Questa GIF mostra un telefono in orientamento orizzontale e schermo in
orientamento verticale. Viene visualizzata un'icona per chiedere all'utente se vuole
modificare l'orientamento dello schermo in orizzontale.](https://source.android.com/static/docs/core/display/images/rotate-btn-quickstep.gif?authuser=1&hl=it)
La preferenza di rotazione degli utenti deve essere mantenuta quando si passa da un'attività all'altra. Tuttavia, poiché la maggior parte degli utenti di telefoni desidera visualizzare la modalità orizzontale per un breve breve, temporaneo, abbiamo aggiunto un bias di orientamento naturale. Rotazione utenti l'impostazione viene reimpostata all'orientamento naturale del dispositivo ogni volta che la rotazione del sistema cambia in base all'orientamento naturale del dispositivo. Per la maggior parte degli smartphone, l'orientamento naturale del dispositivo è verticale (0o). Reimpostazione della rotazione degli utenti si verifica quando si utilizza un'app solo in modalità verticale, si blocca il telefono o e tornare all'area di lavoro Avvio app.
Le interazioni di rotazione per gli utenti non sono cambiate molto nell'ultimo decennio. Utenti potrebbe trovare difficile trovare questa funzionalità data la sua cronologia precedente con la rotazione e il posizionamento dei pulsanti nella barra di navigazione. Per questo motivo, abbiamo aggiunto modalità introduzione al pulsante di rotazione che lo evidenzia quando viene visualizzato. Introduzione si verifica solo per le prime interazioni con il pulsante, dopodiché la modalità introduzione è disabilitata.
Origine
Il supporto per i suggerimenti di rotazione è stato aggiunto a Android 9. La maggior parte delle modifiche si trova all'interno seguenti file.
services/.../server/policy/PhoneWindowManager.java
:- Hook che utilizzano l'output di
WindowOrientationListener
(MyOrientationListener
, responsabile del monitoraggio per determinare se il dispositivo è stato ruotato) - Mantiene attivo
WindowOrientationListener
anche quando la rotazione automatica è disabilitata (vedineedSensorRunningLp()
) - Calcola la rotazione del sistema in base alla preferenza di rotazione dell'utente, in alto
Impostazioni e stato del sistema dell'attività
screenOrientation
(vedirotationForOrientationLw()
) - Determina se l'attività principale può ruotare in base a una determinata rotazione (consulta
isRotationChoicePossible()
- Hook che utilizzano l'output di
SystemUI/.../statusbar/phone/NavigationBarFragment
:- Determina se il pulsante della barra di navigazione deve essere visualizzato durante la rotazione
callback di suggerimenti da
PhoneWindowManager
(vedionRotationProposal()
) - Gestisce quando nascondere il pulsante di rotazione della barra di navigazione (vedi le chiamate a
setRotateSuggestionButtonState(false)
- Gestisce i timeout del pulsante, incluso il caso speciale quando la barra di navigazione è nascosta (di solito a schermo intero)
- Reimposta le preferenze dell'utente quando torna alle impostazioni naturali del dispositivo
orientamento (
mRotationWatcher
) - Sceglie lo stile appropriato per l'animazione del pulsante della barra di navigazione.
applicata in
NavigationBarView
(vedionRotationProposal()
) - Aggiunge una logica della modalità introduttiva, inclusa un'animazione specializzata
(vedi i riferimenti a
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
- Implementa il flag di rotazionedisable2 (vedi
disable()
)
- Determina se il pulsante della barra di navigazione deve essere visualizzato durante la rotazione
callback di suggerimenti da
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Animazione dell'icona del pulsante Stili corrispondente alla rotazione in attesa (vedi
updateRotateSuggestionButtonStyle()
- Gestisce le modifiche alla visibilità dei pulsanti (vedi
setRotateButtonVisibility()
), inclusa la logica per nascondere il pulsante di rotazione se alcuni servizi di accessibilità sono attivi (considerando la classificazione della pila di pulsanti della barra di navigazione più a destra)
- Animazione dell'icona del pulsante Stili corrispondente alla rotazione in attesa (vedi
SystemUI/res/layout/menu_ime.xml
:- Include un nuovo
KeyButtonView
per il pulsante di rotazione, sopra il menu e il selettore IME/tastiera, ma sotto Pulsante Accessibilità
- Include un nuovo
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:- Il complesso
AnimatedVectorDrawable
utilizzato per animare il pulsante ruota barra di navigazione - Lo stile (in
SystemUI/res/values/styles.xml
) è utilizzato per imposta gli angoli inizio e fine della rotazione in modo che possa essere utilizzata per animare varie rotazioni di inizio e fine - Colorazione delle icone impostata tramite
TintedKeyButtonDrawable
- Il complesso
Implementazione
Android 9 include tutte le modifiche necessarie per ottenere dei suggerimenti di rotazione dispositivi che usano i tasti di navigazione del software (torna indietro, home e così via).
I produttori di dispositivi che creano dispositivi con tasti di navigazione hardware che desiderano per implementare questa funzionalità dovrà progettare e implementare la propria interfaccia utente di sistema, invito o disabilitare la funzionalità. È consigliabile che qualsiasi piattaforma introdotta essere facile da usare quando il dispositivo è tenuto a 90o o 180o rispetto al sistema attuale ed è rapidamente accessibile. Per questi motivi, l'utilizzo delle notifiche (come per l'IME/selettore da tastiera) non è consigliato.
I requisiti hardware per l'utilizzo di questa funzionalità coincidono con i requisiti per utilizzare la rotazione automatica.
Per garantire la coerenza dell'implementazione, è necessario che la preferenza di rotazione dell'utente
(Settings.System.USER_ROTATION
) viene reimpostato al naturale
rotazione quando, per qualsiasi motivo, il sistema passa alla rotazione naturale del dispositivo
quando la rotazione automatica è disattivata. L'implementazione fornita esegue questa operazione (vedi
NavigationBarFragment.mRotationWatcher
).
Nuova segnalazione in StatusBarManager.disable2
da temporaneamente
Impedire la visualizzazione dei suggerimenti di rotazione. Consulta
StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
. Questo flag deve essere
rispettato in tutte le implementazioni in quanto usato da app di sistema fondamentali, tra cui
configurazione guidata. L'implementazione fornita supporta questa funzione (vedi
NavigationBarFragment.disable()
).
Ti consigliamo vivamente di attivare la funzionalità e seguire l'AOSP implementazione, se possibile. Il nostro obiettivo è mantenere l'esperienza di rotazione simile da un dispositivo all'altro, rispecchiando l'uniformità dell'esperienza sulla maggior parte degli smartphone di oggi. tra la rotazione automatica e il blocco verticale.
Personalizzazione
Poiché i suggerimenti di rotazione vengono visualizzati solo in modalità di rotazione bloccata (rotazione automatica disattivata),
è possibile scegliere se la funzionalità è attiva per impostazione predefinita per le nuove installazioni
e scegliere di disattivare la rotazione
automatica per impostazione predefinita. Consulta
def_accelerometer_rotation
pollici
SettingsProvider/res/values/defaults.xml
per apportare modifiche predefinite.
Gli utenti possono cambiare facilmente se la rotazione automatica è attiva o meno (indipendentemente dall'impostazione predefinita) tramite il riquadro di rotazione in Impostazioni rapide o Impostazioni display.
Convalida
Per i test, la funzionalità può essere disattivata e attivata modificando un blocco
Valore Settings.Secure
. Ciò è stato reso più semplice eseguendo
il seguente comando da un'istanza adb con privilegi:
adb shell settings put secure show_rotation_suggestions <x>
Imposta x su 0
per disattivare e 1
per on.
Per i test, la modalità introduttiva può essere reimpostata modificando il valore associato
Valore Settings.Secure
. Ciò è stato reso più semplice eseguendo
il seguente comando da un'istanza adb con privilegi:
adb shell settings put secure num_rotation_suggestions_accepted 0