W Androidzie 8.0 użytkownicy mogli przełączać się między autoobracaniem a obrotem pionowym za pomocą kafelka Szybkich ustawień lub ustawień wyświetlacza. Na Androidzie 9, zaktualizowaliśmy do orientacji pionowej, aby zapobiec niezamierzonym obróceniom, przypnij bieżącego obrotu ekranu, nawet jeśli położenie urządzenia się zmieni. Użytkownicy mogą aktywować ręcznie obrócić mapę, naciskając nowy przycisk na pasku nawigacyjnym. Zmieniliśmy nazwę trybu pionowego na blokadę obracania. Funkcja ta aktywuje się przy autoobracaniu jest wyłączony. Tryb autoobracania się nie zmienia.
Gdy urządzenie jest w trybie blokady obracania, użytkownicy mogą zablokować ekran
rotacja obsługiwana przez górną, widoczną aktywność (z uwzględnieniem bieżącego systemu)
). Jeśli najwyższa aktywność może zostać wyrenderowana w wielu rotacjach w regionie
w trybie autoobracania, te same opcje powinny być dostępne w trybie blokady obracania
z kilkoma wyjątkami na podstawie screenOrientation
danych o aktywności
.
Tryb blokady obracania wyświetla przycisk na pasku nawigacyjnym podczas obrotu urządzenia
zmian. W tym celu czujnik orientacji urządzenia musi pozostawać aktywny.
nawet przy wyłączonym autoobracaniu. Kliknięcie tego przycisku powoduje ustawienie rotacji użytkownika
(Settings.System.USER_ROTATION
). WindowManager korzysta z tego
oraz inne szczegóły głównych aktywności i stanu systemu,
aby zmienić obrót systemu. WindowManager nadal używa rotacji użytkowników
podczas decydowania, w jakiej rotacji ma się wyrenderować system przy przechodzeniu do
inną aktywność.
Przy przechodzeniu między aktywnościami należy zachować preferencje rotacji użytkowników. Większość użytkowników telefonów chce tylko przez krótki czas patrzeć w orientacji poziomej, ale dodaliśmy też naturalną orientację. Rotacja użytkowników jest zresetowany do naturalnej orientacji urządzenia za każdym razem, obrót systemu zmienia się do naturalnej orientacji urządzenia. Na większości telefonów naturalna orientacja urządzenia to pionowa (0o). Resetuję rotację użytkowników często zdarza się, gdy używasz aplikacji tylko w orientacji pionowej, blokujesz telefon powrót do obszaru roboczego Menu z aplikacjami.
Interakcje użytkowników związane z rotacją nie zmieniły się w ciągu ostatniej dekady. Użytkownicy mogą mieć trudności z odkryciem tej funkcji, biorąc pod uwagę wcześniejsze doświadczenia z rotacją. i umiejscowienie przycisków na pasku nawigacyjnym. Dlatego dodaliśmy do przycisku Obróć, który jest podświetlony, gdy się pojawi. Wprowadzenie w trybie działania ma miejsce tylko kilka pierwszych interakcji z przyciskami, po których upływie tryb wprowadzenia jest wyłączony.
Źródło
Obsługa sugestii dotyczących rotacji została dodana do tych elementów: Android 9. Większość zmian jest zawarta w .
services/.../server/policy/PhoneWindowManager.java
:- Elementy przykuwające uwagę na dane wyjściowe z
WindowOrientationListener
(MyOrientationListener
, odpowiada za monitorowanie aby określić, czy urządzenie zostało obrócone). - Utrzymuje aktywność
WindowOrientationListener
nawet wtedy, gdy autoobracanie jest wyłączone (patrzneedSensorRunningLp()
) - Oblicza rotację systemu z uwzględnieniem preferencji rotacji użytkowników, góra
Ustawienia aktywności i stan systemu w
screenOrientation
(zobacz:rotationForOrientationLw()
) - Określ, czy najwyższa aktywność może być rotowana do danej rotacji (patrz:
isRotationChoicePossible()
).
- Elementy przykuwające uwagę na dane wyjściowe z
SystemUI/.../statusbar/phone/NavigationBarFragment
:- Określa, czy przycisk paska nawigacyjnego ma być wyświetlany podczas obrotu
sugerowane wywołania zwrotne od
PhoneWindowManager
(zobacz:onRotationProposal()
) - Ukrywa przycisk obracania paska nawigacyjnego (patrz wywołania funkcji
setRotateSuggestionButtonState(false)
). - Obsługuje czas oczekiwania przycisku, łącznie ze specjalnymi przypadkami, gdy pasek nawigacyjny jest ukryty (zwykle jest widoczny na pełnym ekranie)
- Resetuje ustawienia użytkownika po powrocie do trybu naturalnego urządzenia
orientacja (
mRotationWatcher
) - Wybiera odpowiedni styl animacji przycisku na pasku nawigacyjnym,
zastosowano w:
NavigationBarView
(zobacz:onRotationProposal()
) - Dodaje funkcje logiczne w trybie wprowadzenia, w tym specjalistyczną animację.
(zobacz odniesienia do
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
). - Implementuje flagę rotacji wyłączania2 (patrz
disable()
).
- Określa, czy przycisk paska nawigacyjnego ma być wyświetlany podczas obrotu
sugerowane wywołania zwrotne od
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Animacja ikony przycisku Style zgodnie z oczekiwaniem na obrót (patrz
updateRotateSuggestionButtonStyle()
). - Zmiany widoczności przycisku uchwytów (patrz
setRotateButtonVisibility()
), w tym logikę ukrywania. przycisk obracania, jeśli aktywne są określone usługi ułatwień dostępu. (biorąc pod uwagę pozycję stosów przycisków umieszczonych najdalej na prawo od paska nawigacyjnego)
- Animacja ikony przycisku Style zgodnie z oczekiwaniem na obrót (patrz
SystemUI/res/layout/menu_ime.xml
:- Zawiera nowy element
KeyButtonView
dla przycisku obracania, umieszczone nad menu oraz edytorem IME/klawiaturą, ale poniżej Przycisk ułatwień dostępu
- Zawiera nowy element
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:- Złożony element
AnimatedVectorDrawable
użyty do animacji przycisk obracania paska nawigacyjnego - Styl (w języku:
SystemUI/res/values/styles.xml
) jest używany do: ustaw początkowy i końcowy kąt obrotu tak, aby można było rysować ten sam element służy do animowania różnych obrotów początkowych i końcowych - Odcień ikony można ustawić w:
TintedKeyButtonDrawable
- Złożony element
Implementacja
Android 9 zawiera wszystkie zmiany niezbędne do sugestie dotyczące rotacji działają na urządzeniach, które korzystają z oprogramowanych klawiszy nawigacyjnych (wstecz, ekran główny itp.).
producenci urządzeń, którzy opracowują własne urządzenia ze sprzętowymi klawiszami nawigacyjnymi, Aby wdrożyć tę funkcję, muszą zaprojektować i wdrożyć własny interfejs użytkownika lub wyłączyć tę funkcję. Zaleca się, aby wszelkie wprowadzane powierzchnie być łatwe w obsłudze, gdy urządzenie jest ustawione pod kątem 90o lub 180o w stosunku do obecnego systemu; i jest szybko dostępne. Dlatego korzystanie z powiadomień (tak jak w przypadku edytora IME/selektora klawiatury) nie jest zalecany.
Wymagania sprzętowe potrzebne do korzystania z tej funkcji są takie same jak wymagania sprzętowe aby użyć autoobracania.
Dla spójności implementacji niezbędna jest preferencja rotacji użytkowników
(Settings.System.USER_ROTATION
) jest resetowany do naturalnych ustawień urządzenia
gdy system z dowolnego powodu zmieni się na naturalną obrót urządzenia
gdy autoobracanie jest wyłączone. Zajmuje to udostępniona implementacja (zobacz
NavigationBarFragment.mRotationWatcher
).
StatusBarManager.disable2
ma nową flagę, która tymczasowo
zapobiega wyświetlaniu sugestii dotyczących rotacji. Zobacz
StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
Ta flaga musi być
są respektowane we wszystkich implementacjach,
jakie są używane przez kluczowe aplikacje systemowe,
Kreator konfiguracji. Udostępniona implementacja to umożliwia (zobacz
NavigationBarFragment.disable()
).
Zdecydowanie zalecamy włączenie tej funkcji i przestrzeganie zasad AOSP i implementacji, o ile to możliwe. Chcemy, aby rotacja przebiegła podobnie między urządzeniami, co odzwierciedla jednolitość na większości obecnie telefonów. między autoobracaniem a blokadą w orientacji pionowej.
Dostosowywanie
Sugestie dotyczące obracania wyświetlają się tylko w trybie blokady obrotu (autoobracanie jest wyłączone),
można wybrać, czy funkcja ma być domyślnie włączona w przypadku nowych instalacji,
domyślnie wyłączone autoobracanie. Zobacz
def_accelerometer_rotation
in
SettingsProvider/res/values/defaults.xml
, aby wprowadzić zmiany domyślne.
Użytkownicy mogą łatwo zmienić to, czy autoobracanie jest włączone, czy wyłączone (niezależnie od ustawienia domyślnego). używając kafelka obracania w Szybkich ustawieniach lub ustawieniach wyświetlacza.
Weryfikacja
W ramach testów funkcję tę można wyłączyć i włączyć przez zmianę bramki
Wartość: Settings.Secure
. Najłatwiej to zrobić, uruchamiając
następujące polecenie z instancji adb z podwyższonymi uprawnieniami:
adb shell settings put secure show_rotation_suggestions <x>
Ustaw x na 0
(wyłączone), a 1
na „włączone”.
Na potrzeby testów tryb wprowadzenia można zresetować, modyfikując powiązane
Wartość: Settings.Secure
. Najłatwiej to zrobić, uruchamiając
następujące polecenie z instancji adb z podwyższonymi uprawnieniami:
adb shell settings put secure num_rotation_suggestions_accepted 0