Sous Android 8.0, les utilisateurs pouvaient basculer entre la rotation automatique et la rotation en mode portrait. à l'aide d'un bloc Réglages rapides ou des paramètres d'affichage. Sur Android 9, nous avons mis à jour pour éliminer les rotations involontaires en épinglant la rotation actuelle de l'écran même si la position de l'appareil change. Les utilisateurs peuvent déclencher manuellement en cas de besoin en appuyant sur un nouveau bouton dans la barre de navigation. Le mode Portrait a été renommé "Verrouillage de la rotation", qui s'active lors de la rotation automatique. est désactivé. Aucune modification n'a été apportée au mode de rotation automatique.
Lorsque l'appareil est en mode de verrouillage de la rotation, les utilisateurs peuvent verrouiller leur écran sur
rotation prise en charge par l'activité visible supérieure (compte tenu du système actuel
contraintes). Si l'activité principale peut être affichée en plusieurs rotations dans
le mode rotation automatique, les mêmes options
devraient être disponibles en mode rotation verrouillée,
à quelques exceptions près, selon l'objet screenOrientation
de l'activité
.
Le mode verrouillé de la rotation fonctionne en affichant un bouton dans la barre de navigation lors de la rotation de l'appareil
des modifications. Pour ce faire, le capteur d'orientation de l'appareil doit rester actif.
même si la rotation automatique est désactivée. Appuyer sur ce bouton permet de configurer efficacement la rotation des utilisateurs
(Settings.System.USER_ROTATION
). WindowManager utilise cette
la préférence, ainsi que d'autres informations sur l'activité principale et l'état du système,
pour changer la rotation du système. WindowManager continue à utiliser la rotation des utilisateurs
pour choisir la rotation dans laquelle afficher le système
une autre activité.
![Ce GIF montre un téléphone en mode paysage avec l'écran affiché
en mode portrait. Une icône s'affiche pour demander à l'utilisateur s'il souhaite
changer l'orientation de son écran en paysage ;](https://source.android.com/static/docs/core/display/images/rotate-btn-quickstep.gif?authuser=9&hl=fr)
La préférence de rotation des utilisateurs doit être maintenue lorsque vous passez d'une activité à une autre. Cependant, comme la plupart des utilisateurs de téléphones ne veulent rester en mode paysage que pendant un court instant, temporaire, nous avons ajouté un biais d'orientation naturelle. Rotation des utilisateurs préférence est rdéfinie sur l'orientation naturelle de l'appareil chaque fois que la rotation du système change en fonction de l'orientation naturelle de l'appareil. Pour la plupart des téléphones, l'orientation naturelle de l'appareil est le mode portrait (0o). Réinitialisation de la rotation des utilisateurs... une préférence est souvent accordée lors de l'utilisation d'une application en mode portrait, du verrouillage du téléphone retour à l'espace de travail du lanceur d'applications.
Les interactions de rotation des utilisateurs n'ont pas beaucoup changé au cours de la dernière décennie. Utilisateurs peuvent avoir du mal à découvrir cette caractéristique, compte tenu de leur historique de rotation et le positionnement des boutons dans la barre de navigation. C'est pourquoi nous avons ajouté d'introduction au bouton de rotation qui le met en surbrillance lorsqu'il apparaît. Introduction du mode ne se produit que lors des premières interactions avec le bouton. le mode introduction est désactivé.
Source
Les suggestions de rotation sont maintenant disponibles dans Android 9. La plupart des modifications sont contenues dans les fichiers suivants.
services/.../server/policy/PhoneWindowManager.java
: <ph type="x-smartling-placeholder">- </ph>
- Hooks qui consomment la sortie de
WindowOrientationListener
(MyOrientationListener
, responsable de la surveillance capteurs pour déterminer si l'appareil a été pivoté) - Le
WindowOrientationListener
reste actif même lorsque la rotation automatique est désactivée (voirneedSensorRunningLp()
) - Calcule la rotation du système en fonction de la préférence de rotation de l'utilisateur, en haut
Paramètres de l'activité
screenOrientation
et état du système (voirrotationForOrientationLw()
) - Déterminez si l'activité principale peut effectuer une rotation selon une rotation donnée (voir
isRotationChoicePossible()
).
- Hooks qui consomment la sortie de
SystemUI/.../statusbar/phone/NavigationBarFragment
: <ph type="x-smartling-placeholder">- </ph>
- Détermine si le bouton de la barre de navigation doit s'afficher lors d'une rotation
suggestions de rappels de
PhoneWindowManager
(voironRotationProposal()
) - Permet de gérer quand masquer le bouton de rotation de la barre de navigation (voir les appels à
setRotateSuggestionButtonState(false)
). - Gère les délais d'inactivité des boutons, y compris le cas particulier lorsque le La barre de navigation est masquée (généralement en plein écran)
- Réinitialise les préférences de l'utilisateur lorsqu'il revient à la configuration
orientation (
mRotationWatcher
) - Choisit le style approprié pour l'animation du bouton de la barre de navigation
appliqué dans
NavigationBarView
(voironRotationProposal()
) - Ajout d'une logique pour le mode d'introduction, y compris une animation spécialisée
(voir les références
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
). - Implémente l'indicateur de rotationdisable2 (voir
disable()
).
- Détermine si le bouton de la barre de navigation doit s'afficher lors d'une rotation
suggestions de rappels de
SystemUI/.../statusbar/phone/NavigationBarView.java
: <ph type="x-smartling-placeholder">- </ph>
- Animation de l'icône du bouton "Styles" pour correspondre à la rotation en attente (voir
updateRotateSuggestionButtonStyle()
). - Gère les changements de visibilité des boutons (voir
setRotateButtonVisibility()
), y compris la logique de masquage Bouton de rotation si certains services d'accessibilité sont actifs (en tenant compte du classement de la pile de boutons la plus à droite de la barre de navigation)
- Animation de l'icône du bouton "Styles" pour correspondre à la rotation en attente (voir
SystemUI/res/layout/menu_ime.xml
: <ph type="x-smartling-placeholder">- </ph>
- Inclut un nouveau
KeyButtonView
pour le bouton de rotation empilés au-dessus du menu et du sélecteur IME/clavier, mais en dessous Bouton Accessibilité
- Inclut un nouveau
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
: <ph type="x-smartling-placeholder">- </ph>
- Élément
AnimatedVectorDrawable
complexe utilisé pour animer le bouton de rotation de la barre de navigation - Le style (dans
SystemUI/res/values/styles.xml
) permet de définissez les angles de départ et de fin de rotation afin que le même drawable puisse être utilisé pour animer différentes rotations de début et de fin - Les teintes des icônes sont définies via
TintedKeyButtonDrawable
- Élément
Implémentation
Android 9 inclut toutes les modifications nécessaires pour obtenir suggestions de rotation fonctionnent pour les appareils qui utilisent des touches de navigation logicielles (retour, domicile, etc.).
Fabricants d'appareils qui créent des appareils avec des touches de navigation matérielles pour implémenter cette fonctionnalité devront concevoir et implémenter leur propre UI système. l' affordance ou la désactivation de la fonction. Il est recommandé d'intégrer Être faciles à utiliser lorsque l'appareil est tenu à 90 ou 180° par rapport au système actuel et est rapidement accessible. C'est pourquoi l'utilisation des notifications (comme pour l'IME/le sélecteur de clavier) n'est pas recommandée.
La configuration matérielle requise pour utiliser cette fonctionnalité est identique à celle requise pour utiliser la rotation automatique.
Pour assurer la cohérence de l'implémentation, il est nécessaire que la préférence de rotation des utilisateurs
(Settings.System.USER_ROTATION
) est réinitialisée selon la configuration
lorsque le système passe à la rotation naturelle de l'appareil pour une raison quelconque
lorsque la rotation automatique est désactivée. L'implémentation fournie effectue cette opération (voir
NavigationBarFragment.mRotationWatcher
).
Il y a un nouvel indicateur dans StatusBarManager.disable2
pour
empêcher l'affichage des suggestions de rotation. Voir
StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
Cet indicateur doit être
respecté dans toutes les implémentations, comme c'est le cas par les applications système critiques, y compris
Assistant de configuration. L'implémentation fournie le permet (voir
NavigationBarFragment.disable()
).
Nous vous recommandons vivement d'activer la fonctionnalité et de suivre l'AOSP. si possible. Notre but est que l'expérience de rotation reste entre appareils, reflétant l'uniformité de l'expérience sur la plupart des téléphones aujourd'hui entre la rotation automatique et le verrouillage en mode portrait.
Personnalisation
Comme les suggestions de rotation ne s'affichent qu'en mode verrouillage de la rotation (rotation automatique désactivée),
vous pouvez choisir d'activer ou non cette fonctionnalité par défaut pour les nouvelles installations
la rotation automatique doit être désactivée par défaut. Voir
def_accelerometer_rotation
po
SettingsProvider/res/values/defaults.xml
pour apporter des modifications par défaut.
Les utilisateurs peuvent facilement modifier si la rotation automatique est activée ou non (quelle que soit la valeur par défaut). via la rotation du bloc dans les réglages rapides ou les paramètres d'affichage.
Validation
À des fins de test, il est possible d'activer et de désactiver cette fonctionnalité en modifiant un contrôle.
Valeur Settings.Secure
. Le plus simple est d'exécuter
à partir d'une instance adb privilégiée:
adb shell settings put secure show_rotation_suggestions <x>
Définissez x sur 0
pour désactiver et 1
pour l'activer.
Pour les tests, vous pouvez réinitialiser le mode introduction en modifiant les paramètres
Valeur Settings.Secure
. Le plus simple est d'exécuter
à partir d'une instance adb privilégiée:
adb shell settings put secure num_rotation_suggestions_accepted 0