Vorschläge drehen

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.

Dieses GIF zeigt ein Smartphone im Querformat mit dem Display im Hochformat. Ein Symbol wird angezeigt, über das der Nutzer gefragt wird, ob er die Bildschirmausrichtung ins Querformat ändern möchte.
Abbildung 1: Vorschlagsschaltfläche drehen, wenn die Geste „Auf Startbildschirmtaste nach oben wischen“ aktiviert ist

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 (siehe needSensorRunningLp())
    • Berechnet die Systemdrehung anhand der Nutzereinstellung für die Drehung, der Top-AktivitätsscreenOrientation-Einstellungen und des Systemstatus (siehe rotationForOrientationLw()).
    • Prüfen, ob sich die oberste Aktivität um eine bestimmte Drehung drehen kann (siehe isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • Bestimmt, ob die Navigationsleiste bei der Drehung angezeigt werden soll Vorschlags-Callbacks von PhoneWindowManager (siehe onRotationProposal())
    • 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 (siehe onRotationProposal()).
    • 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())
  • 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.
  • 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
  • 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.

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