In Android 8.0 konnten Nutzer über eine Kachel in den Schnelleinstellungen oder die Displayeinstellungen zwischen den Modi „Automatische Drehung“ und „Hochformat“ wechseln. In Android 9 haben wir den Modus für die Hochformatdrehung aktualisiert, um unbeabsichtigte Drehungen zu vermeiden. Dazu wird die aktuelle Bildschirmdrehung angepinnt, auch wenn sich die Geräteposition ändert. Nutzer können die Drehung bei Bedarf manuell auslösen, indem sie in der Navigationsleiste auf eine neue Schaltfläche klicken. Der Porträtmodus wurde in „Drehsperre“ umbenannt und wird aktiviert, wenn die automatische Drehung deaktiviert ist. Der Modus „Automatische Drehung“ wurde nicht geändert.
Wenn sich das Gerät im Modus „Drehung sperren“ befindet, können Nutzer den Bildschirm auf eine beliebige Drehung sperren, die von der oben sichtbaren Aktivität unterstützt wird (vorbehaltlich der aktuellen Systemeinschränkungen). Wenn die oberste Aktivität im Modus „Automatische Drehung“ in mehreren Drehungen gerendert werden kann, sollten dieselben Optionen auch im Modus „Drehung gesperrt“ verfügbar sein, mit einigen Ausnahmen, die von der screenOrientation
-Einstellung der Aktivität abhängen.
Wenn die Geräteausrichtung geändert wird, wird im Navigationsbereich eine Schaltfläche angezeigt. Dazu muss der Ausrichtungssensor des Geräts auch dann aktiv bleiben, wenn die automatische Drehung deaktiviert ist. Durch Tippen auf diese Schaltfläche wird die Drehungseinstellung des Nutzers (Settings.System.USER_ROTATION
) festgelegt. WindowManager verwendet diese Einstellung zusammen mit anderen Details zur aktiven Aktivität und zum Systemstatus, um die Drehung des Systems zu ändern. WindowManager verwendet weiterhin die Nutzereinstellung für die Bildschirmausrichtung, um zu entscheiden, in welcher Ausrichtung das System gerendert werden soll, wenn der Nutzer zu einer anderen Aktivität wechselt.

Die Einstellung für die Nutzerrotation sollte beibehalten werden, wenn zwischen Aktivitäten gewechselt wird. Da die meisten Smartphone-Nutzer die Querformatansicht jedoch nur für kurze Zeit nutzen möchten, haben wir eine natürliche Ausrichtung hinzugefügt. Die Einstellung für die Nutzerdrehung wird auf die natürliche Ausrichtung des Geräts zurückgesetzt, wenn sich die Systemdrehung in die natürliche Ausrichtung des Geräts ändert. Bei den meisten Smartphones ist das Hochformat (0 Grad) die Standardausrichtung. Die Einstellung für die Bildschirmausrichtung wird häufig zurückgesetzt, wenn Sie eine App verwenden, die nur im Hochformat funktioniert, das Smartphone sperren oder zum Launcher-Arbeitsbereich zurückkehren.
Die Interaktionen der Nutzer mit der Bildrotation haben sich in den letzten zehn Jahren kaum verändert. Nutzer finden diese Funktion aufgrund ihrer bisherigen Erfahrung mit der Drehung und Positionierung von Schaltflächen in der Navigationsleiste möglicherweise schwer zu finden. Aus diesem Grund haben wir der Schaltfläche zum Drehen einen Einführungsmodus hinzugefügt, durch den sie hervorgehoben wird, wenn sie angezeigt wird. Das Verhalten im Einführungsmodus tritt nur bei den ersten Schaltflächeninteraktionen auf, danach wird der Einführungsmodus deaktiviert.
Quelle
In Android 9 wird jetzt die Ausrichtungsvorschläge unterstützt. Die meisten Änderungen sind in den folgenden Dateien enthalten.
services/.../server/policy/PhoneWindowManager.java
:- Hooks, die die Ausgabe von
WindowOrientationListener
(MyOrientationListener
, für die Überwachung der Sensoren verantwortlich, um festzustellen, ob das Gerät gedreht wurde) nutzen - Hält die
WindowOrientationListener
aktiv, auch wenn die automatische Drehung deaktiviert ist (sieheneedSensorRunningLp()
) - Berechnet die Systemdrehung anhand der Nutzereinstellung für die Drehung, der Top-Aktivitäts
screenOrientation
-Einstellungen und des Systemstatus (sieherotationForOrientationLw()
). - Prüfen, ob sich die oberste Aktivität um eine bestimmte Drehung drehen kann (siehe
isRotationChoicePossible()
)
- Hooks, die die Ausgabe von
SystemUI/.../statusbar/phone/NavigationBarFragment
:- Bestimmt, ob die Navigationsleiste bei der Drehung angezeigt werden soll
Vorschlags-Callbacks von
PhoneWindowManager
(sieheonRotationProposal()
) - Hier wird festgelegt, wann die Schaltfläche zum Drehen der Navigationsleiste ausgeblendet wird (siehe Aufrufe von
setRotateSuggestionButtonState(false)
). - Hier werden Schaltflächen-Zeitüberschreitungen verarbeitet, einschließlich des Sonderfalls, wenn die Navigationsleiste ausgeblendet ist (häufig im Vollbildmodus).
- Die Nutzereinstellung wird zurückgesetzt, wenn die natürliche Ausrichtung des Geräts (
mRotationWatcher
) wiederhergestellt wird. - Wählt den entsprechenden Stil für die Navigationsleiste aus, der in
NavigationBarView
angewendet wird (sieheonRotationProposal()
). - Logik für den Einführungsmodus hinzufügen, einschließlich spezieller Animation (siehe Verweise auf
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
) - Implementiert das Rotationsflag „disable2“ (siehe
disable()
)
- Bestimmt, ob die Navigationsleiste bei der Drehung angezeigt werden soll
Vorschlags-Callbacks von
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Animation des Symbols der Schaltfläche „Stile“, die der anstehenden Drehung entspricht (siehe
updateRotateSuggestionButtonStyle()
) - Hier werden Änderungen an der Sichtbarkeit von Schaltflächen verarbeitet (siehe
setRotateButtonVisibility()
), einschließlich der Logik zum Ausblenden der Drehschaltfläche, wenn bestimmte Bedienungshilfen aktiv sind. Dabei wird die Reihenfolge der Schaltflächen im rechten Navigationsbereich berücksichtigt.
- Animation des Symbols der Schaltfläche „Stile“, die der anstehenden Drehung entspricht (siehe
SystemUI/res/layout/menu_ime.xml
:- Enthält ein neues
KeyButtonView
für die Drehungsschaltfläche, die über dem Menü und der Auswahl für die Eingabemethode/Tastatur, aber unter der Schaltfläche „Bedienungshilfen“ angeordnet ist
- Enthält ein neues
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:- Komplexe
AnimatedVectorDrawable
-Anweisung zum Animieren der Schaltfläche zum Drehen der Navigationsleiste - Mit dem Styling (in
SystemUI/res/values/styles.xml
) werden die Start- und Endwinkel der Drehung festgelegt, damit dasselbe drawable zum Animieren verschiedener Start- und Enddrehungen verwendet werden kann. - Die Färbung von Symbolen wird über
TintedKeyButtonDrawable
festgelegt.
- Komplexe
Implementierung
Android 9 enthält alle erforderlichen Änderungen, damit Vorschläge zur Bildschirmausrichtung auf Geräten mit Softwarenavigationstasten (z. B. Zurück und Startbildschirm) funktionieren.
Gerätehersteller, die Geräte mit Hardwarenavigationstasten entwickeln und diese Funktion implementieren möchten, müssen ihre eigene System-UI-Affordance entwerfen und implementieren oder die Funktion deaktivieren. Es wird empfohlen, dass alle Oberflächen einfach zu bedienen sind, wenn das Gerät um 90 ° oder 180 ° zur aktuellen Systemdrehung gehalten wird, und dass sie schnell zugänglich sind. Aus diesen Gründen wird die Verwendung von Benachrichtigungen (wie bei der Auswahl der IME/Tastatur) nicht empfohlen.
Die Hardwareanforderungen für diese Funktion sind dieselben wie für die automatische Bildschirmausrichtung.
Für die Konsistenz der Implementierung ist es erforderlich, dass die Einstellung für die Bildschirmausrichtung des Nutzers (Settings.System.USER_ROTATION
) auf die natürliche Bildschirmausrichtung des Geräts zurückgesetzt wird, wenn das System aus irgendeinem Grund zur natürlichen Bildschirmausrichtung des Geräts wechselt, wenn die automatische Bildschirmausrichtung deaktiviert ist. In der bereitgestellten Implementierung wird dies so umgesetzt (siehe NavigationBarFragment.mRotationWatcher
).
In StatusBarManager.disable2
gibt es ein neues Flag, mit dem sich die Anzeige von Vorschlägen zur Bilddrehung vorübergehend verhindern lässt. Weitere Informationen finden Sie unter StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
. Dieses Flag muss bei allen Implementierungen berücksichtigt werden, da es von wichtigen System-Apps wie dem Einrichtungsassistenten verwendet wird. Die bereitgestellte Implementierung unterstützt dies (siehe NavigationBarFragment.disable()
).
Wir empfehlen dringend, die Funktion zu aktivieren und nach Möglichkeit der AOSP-Implementierung zu folgen. Wir möchten die Bildschirmausrichtung auf allen Geräten möglichst einheitlich gestalten, damit sie der Funktionsweise der meisten Smartphones mit automatischer Bildschirmausrichtung und Porträtsperre entspricht.
Personalisierung
Da Vorschläge zur Bildschirmausrichtung nur im Modus mit gesperrter Bildschirmausrichtung (automatische Bildschirmausrichtung deaktiviert) angezeigt werden, können Sie festlegen, ob die Funktion bei neuen Installationen standardmäßig aktiviert ist. Dazu müssen Sie die automatische Bildschirmausrichtung standardmäßig deaktivieren. Unter def_accelerometer_rotation
in SettingsProvider/res/values/defaults.xml
können Sie Standardänderungen vornehmen.
Nutzer können die automatische Drehung ganz einfach über die entsprechende Kachel in den Schnelleinstellungen oder in den Displayeinstellungen aktivieren oder deaktivieren, unabhängig von der Standardeinstellung.
Zertifizierungsstufe
Für Tests kann die Funktion deaktiviert und aktiviert werden, indem ein Wert für die Auslieferungssteuerung Settings.Secure
geändert wird. Am einfachsten geht das, indem Sie den folgenden Befehl über eine privilegierte adb-Instanz ausführen:
adb shell settings put secure show_rotation_suggestions <x>
Legen Sie für „x“ den Wert „0
“ für „Aus“ und „1
“ für „An“ fest.
Für Tests kann der Einführungsmodus zurückgesetzt werden, indem der zugehörige Settings.Secure
-Wert geändert wird. Am einfachsten geht das, indem Sie den folgenden Befehl über eine privilegierte adb-Instanz ausführen:
adb shell settings put secure num_rotation_suggestions_accepted 0