La traduction de l'article a été préparée spécialement pour les étudiants du cours "développeur Android". Cours de base . " Nous vous rappelons également que nous continuons de nous inscrire au cours avancé "Spécialisation Android-développeur"
La confidentialité et la sécurité se trouvent dans la première partie de l' article.
2) Expériences utilisateur
a) Gestes de navigation

Dans Android Q, Google a essayé de combiner tous les gestes de navigation avec le nouveau système de gestes de navigation, qui a remplacé la barre de navigation flottante (retour, accueil et applications récentes).
- Ce qui affecte: si votre application contient des gestes, ils peuvent entrer en conflit avec les gestes du système. Cela affectera toutes les applications exécutées sur Android Q (quel que soit le SDK cible), car les gestes du système seront traités en premier.
- Approche recommandée: la barre de navigation flottante ayant pratiquement disparu, il est recommandé d'utiliser pleinement le nouvel espace d'écran disponible et de fournir aux utilisateurs un effet immersif.
Pour créer un effet immersif, les applications doivent apparaître derrière la barre d'état et la barre de navigation. Tout d'abord, rendez la barre d'état et la barre de navigation transparentes.
<style name="AppTheme"> ...... <item name="android:navigationBarColor">@android:color/transparent</item> <!-- Optional, but recommended for full edge-to-edge rendering --> <item name="android:statusbarColor">@android:color/transparent</item> </style>
Ensuite, nous faisons l'affichage
Activity/View
Affichage en plein écran:
view.systemUiVisibility =

FAB (Floating Action Button) est couvert par une barre de navigation flottante. Une barre de navigation flottante est incluse pour plus de clarté.
Maintenant que l'application est affichée en mode plein écran derrière les composants système (transparents), il est possible qu'un type de composant d'application interactif soit bloqué par l'interface utilisateur du système. Pour résoudre ce problème, utilisez des encarts.
Les encarts sont un ensemble de valeurs qui nous indiqueront le degré de déplacement de la vue afin qu'elles n'entrent pas en conflit avec l'interface utilisateur du système. Ces informations sont fournies par la classe
WindowInset . À partir de l'API 20, Android fournit aux développeurs des insertions de fenêtre système, qui vous indiquent la quantité d'espace qu'occupent les composants du système (tels que la barre de navigation flottante et la barre d'état). Ces informations peuvent être utilisées pour déplacer la vue interactive de sorte que l'utilisateur appuie dessus, et non sur l'interface utilisateur du système.
root.setOnApplyWindowInsetsListener { _, insets -> val fabLp = fab.layoutParams as CoordinatorLayout.LayoutParams fabLp.bottomMargin = fabOriginalBottomMargin + insets.systemWindowInsetBottom fab.layoutParams = fabLp insets.consumeSystemWindowInsets() }
Pour FAB, définissez l'écouteur WindowsInsets et appliquez l'encart de la fenêtre inférieure comme retrait inférieur.
De même, à partir d'Android Q, le système fournit des encarts pour les mouvements de navigation afin de déplacer les vues permutées afin qu'elles n'entrent pas en conflit avec les mouvements du système. Ils sont fournis via Insets.getSystemGestureInsets ()
Les zones de gestes du système sont surlignées en jaune.Mais que se passe-t-il si nous ne voulons pas déplacer la vue et que nous voulons placer du contenu dans ces zones de gestes qui peuvent entrer en conflit avec l'application? Dans ces scénarios, l'application peut déterminer les zones dans lesquelles l'application va d'abord gérer l'événement tactile, plutôt que les gestes du système. Cela peut être fait en passant
List<
Rect >
à l'API
View.setSystemGestureExclusionRects () fournie dans Android Q. Cette méthode est également disponible dans
ViewCompat avec
androidx.core:core:1.1.0
.
- Pièges: vous pouvez refuser de traiter uniquement les gestes inversés. Les limites du geste «maison» sont réservées et ne peuvent pas être redéfinies. En effet, il n'y a qu'une seule façon de quitter l'application. Si votre application entre en conflit avec le geste "home", utilisez
WindowInsets.getMandatorySystemGestureInsets()
pour obtenir ses bordures et déplacer votre vue.
b) Thème sombre
Au cours de la dernière année, de nombreuses applications ont commencé à prendre en charge des thèmes sombres. Android Q ajoute ce commutateur aux paramètres système.
L'utilisateur peut activer le thème sombre de trois manières:
- Un nouvel élément dans les paramètres système (Paramètres -> Affichage -> Thème)
- Nouvel élément dans les paramètres rapides
- Selon le fabricant, il peut être activé via le mode d'économie d'énergie.
Pour prendre en charge la configuration à l'échelle du système Dark Theme, le thème par défaut de votre application doit hériter du thème DayNight. Cela relie le thème principal de l'application aux indicateurs de mode nuit contrôlés par le système. Cela fonctionne en extrayant les ressources des dossiers de qualification de
night
.
<!--App Compat Style--> <style name="AppTheme" parent="Theme.AppCompat.DayNight"> <!--Material Components--> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Si vous regardez à l'intérieur des styles de compatibilité des applications, vous remarquerez que le thème DayNight pointe vers AppCompat Light dans la configuration par défaut et AppCompat dans la configuration de nuit.
<!--values/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat.Light"> <!--values-night/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat">
Si vous voulez donner aux utilisateurs la possibilité de contrôler le thème depuis l'application, vous pouvez appeler
AppCompatDelegate.setDefaultNightMode () , qui accepte l'un des quatre modes:
MODE_NIGHT_YES
- Afficher le thème sombreMODE_NIGHT_NO
- Afficher un sujet brillantMODE_NIGHT_FOLLOW_SYSTEM
- Suivez les paramètres du systèmeMODE_NIGHT_AUTO_BATTERY
- MODE_NIGHT_AUTO_BATTERY
thème sombre lorsque l'appareil passe en mode d'économie d'énergie.
a) Ne codez pas en dur les couleurs. S'il y a des couleurs codées en dur dans les fichiers de mise en page, c'est un réveil. Remplacez-les par des liens vers la
color
. Encore mieux: utilisez des attributs pour faire référence aux couleurs.
b) Vérifiez les images et fournissez-leur d'autres ressources dans le cadre du classificateur de
night
.
c) Il ne devrait pas y avoir de couleurs à revêtement dur dans les dessins vectoriels. Utilisez la
tint
pour styliser les ressources vectorielles avec la bonne couleur.
d) Assurez-vous que toutes
color
ressources de
color
ont des alternatives correspondantes dans le dossier
night
(
values-night/colors.xml
)
e) Si une application utilise RemoteViews pour les notifications ou les widgets, assurez-vous également de les tester. C'est bien si l'application utilise les styles de notification par défaut, car alors le système les traitera.
f) Un changement de configuration pour
uiMode
est appelé chaque fois que l'appareil bascule entre le mode normal et le mode sombre. L'utilisateur peut le faire manuellement ou activer le mode d'économie d'énergie. Si l'application ne gère pas correctement les modifications de configuration, l'interface utilisateur perd le contexte lorsque l'appareil bascule entre les modes normal et sombre, car les activités visibles et leurs fragments sont détruits et recréés. Par conséquent, même si l'interface utilisateur est verrouillée dans la même orientation, ajoutez la prise en charge des modifications de configuration. De plus, si l'application gère manuellement les changements de configuration via
android:configChanges
, il y a de fortes chances que vous souhaitiez également gérer manuellement
uiMode
. Par exemple, si une application utilise la lecture continue (lecteur vidéo), elle peut ne pas vouloir interrompre la lecture simplement parce que l'appareil est passé du mode normal au mode sombre.
Android Q a également introduit de nombreuses autres choses que je n'ai pas abordées en détail, telles que le panneau Paramètres, la nouvelle API AudioPlaybackCapture (l'API permet aux applications de copier le son joué par d'autres applications. Cette fonction est similaire à la capture d'écran, mais pour l'audio).
Enfin, Android Q comprend une liste mise à jour des interfaces limitées non spécifiques au SDK, qui peuvent finalement se voir refuser l'accès à partir du SDK Android. Vous pouvez trouver une liste de vos violations dans la console de jeu dans la section «Rapport de pré-lancement».
C’est tout. Si vous pensez qu'il y a quelque chose d'important qui n'est pas mentionné dans l'article, faites le moi savoir dans les commentaires ci-dessous. ;-)