Une encoche est une zone située sur certains appareils
qui s'étend sur toute la surface de l'écran. Elle offre une expérience bord à bord
tout en laissant de l’espace pour les capteurs importants à l’avant de l’appareil.
Android est compatible avec les encoches sur les appareils équipés d'Android 9 (niveau d'API 28) et
plus élevée. Toutefois, les fabricants d'appareils peuvent
également prendre en charge les encoches sur
appareils équipés d'Android 8.1 ou version antérieure.
Ce document explique comment prendre en charge
les appareils avec encoches,
y compris sur l'utilisation de la zone d'encoche, c'est-à-dire la bordure
rectangle sur la surface de l'écran contenant l'encoche.
Image 1.1 Écran
encoche.
Choisissez comment votre application gère les zones d'encoche
Si vous ne souhaitez pas que votre contenu chevauche une encoche,
pour que votre contenu ne chevauche pas la barre d'état et le
barre de navigation. Si vous effectuez le rendu dans la zone d'encoche, utilisez
WindowInsetsCompat.getDisplayCutout()
pour récupérer un objet DisplayCutout
qui contient les encarts sûrs et
le cadre de délimitation pour chaque encoche. Ces API permettent
vous pouvez vérifier si votre contenu
chevauche l'encoche
repositionnez-les si nécessaire.
Vous pouvez également déterminer si le contenu est disposé derrière l'encoche. La
layoutInDisplayCutoutMode
L'attribut de mise en page de la fenêtre contrôle la façon dont votre contenu est dessiné dans la zone d'encoche.
Vous pouvez définir layoutInDisplayCutoutMode sur l'une des valeurs suivantes:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT:
le contenu s'affiche dans l'encoche lorsque celle-ci est contenue
la barre système. Sinon, la fenêtre ne chevauche pas l'encoche. pour
Par exemple, le contenu peut être au format letterbox lorsqu'il est affiché en mode Paysage. Si
votre application cible le SDK 35, ce qui est interprété comme ALWAYS pour les créations non flottantes.
Windows.
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS:
contenu est toujours autorisé à s'étendre dans les zones d'encoche. Si votre application cible
SDK 35 et qu'il s'exécute sur un appareil Android 15, c'est le seul mode autorisé pour
pour garantir un affichage bord à bord.
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES:
le contenu s'affiche dans la zone d'encoche en mode portrait et paysage. À ne pas faire
utiliser pour les fenêtres flottantes. Si votre application cible le SDK 35, cela est interprété comme
ALWAYS pour les fenêtres non flottantes.
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER:
le contenu ne s'affiche jamais dans la zone d'encoche. Si votre application cible le SDK 35,
interprétée comme ALWAYS pour les fenêtres non flottantes.
Vous pouvez définir le mode d'encoche soit par programmation, soit en définissant un
style dans votre activité. Les éléments suivants :
L'exemple définit un style pour appliquer LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
à l'activité.
Les sections suivantes décrivent plus en détail les différents modes de découpe.
Comportement par défaut
Si votre application cible le SDK 35 et s'exécute sur un appareil Android 15,
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS est le comportement par défaut.
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT est interprété comme
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS pour les fenêtres non flottantes.
Sinon, LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT est la valeur par défaut.
Afficher le contenu dans les encoches des bords courts
Si votre application cible le SDK 35 et s'exécute sur un appareil Android 15,
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES est interprété comme
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS pour les fenêtres non flottantes.
Avec LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, le
le contenu s'étend dans la zone d'encoche sur le bord court de l'écran
en mode portrait et paysage, que les barres système soient masquées ou non
visible. Lorsque vous utilisez ce mode, assurez-vous qu'aucun contenu important ne chevauche
la zone de l'encoche.
L'image suivante est un exemple de LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
pour un appareil en mode portrait:
Figure 2 : Rendu du contenu dans la zone d'encoche
en mode Portrait.
L'image suivante est un exemple de LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
pour un appareil en mode paysage:
Figure 3 : Rendu du contenu dans la zone d'encoche
en mode Paysage.
Dans ce mode, la fenêtre s'étend sous les encoches sur le bord court de l'écran
en mode portrait et paysage, que la fenêtre masque ou non la
barres système.
Une encoche dans un coin est considérée comme sur le bord court:
Figure 4 : Un appareil avec une découpe dans un coin.
Ne jamais afficher de contenu dans l'encoche
Si votre application cible le SDK 35 et s'exécute sur un appareil Android 15,
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER est interprété comme
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS pour les fenêtres non flottantes.
Avec LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER, la fenêtre n'est jamais autorisée à
avec la zone de l'encoche.
Voici un exemple de LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER dans
portrait:
Figure 5 : Exemple de
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER pour le mode Portrait.
Voici un exemple de LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER dans
Mode Paysage:
Figure 6 : Exemple de
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER en mode Paysage.
Bonnes pratiques concernant la compatibilité avec l'encoche
Lorsque vous utilisez des encoches, tenez compte des points suivants:
Faites attention au placement des éléments essentiels de l'interface utilisateur. Ne laissez pas le
pour masquer le texte, les commandes ou toute autre information important.
Ne placez pas et n'étendez pas d'éléments interactifs qui nécessitent une
dans la zone d'encoche. La sensibilité tactile peut être inférieure dans le
dans la zone d'encoche.
Si possible, utilisez
WindowInsetsCompat jusqu'à
Récupérez la hauteur de la barre d'état et déterminez la marge intérieure appropriée à appliquer
à votre contenu. Évitez de coder en dur la hauteur de la barre d'état, car cela peut entraîner
les contenus qui se chevauchent
ou sont tronqués.
<ph type="x-smartling-placeholder"></ph>
<ph type="x-smartling-placeholder"></ph>
Figure 7. Utilisez WindowInsetsCompat pour
évitez de chevaucher
ou de couper le contenu.
Utiliser View.getLocationInWindow()
pour déterminer l'espace de fenêtre utilisé par votre application. Ne partez pas du principe que l'application
en utilisant la fenêtre entière et n'utilisez pas
View.getLocationOnScreen()
Utilisez les modes de découpe always, shortEdges ou never si votre application doit
avant et après le mode immersif. Le comportement par défaut de l'encoche
contenu de votre application pour qu'il s'affiche dans la zone d'encoche lorsque les barres système
mais pas en mode immersif. Cela entraîne le déplacement
du contenu vers le haut
pendant les transitions, comme illustré dans l'exemple suivant.
<ph type="x-smartling-placeholder"></ph>
<ph type="x-smartling-placeholder"></ph>
Figure 8 : Exemple de contenu se déplaçant vers le haut et vers le bas
pendant les transitions.
En mode immersif, vous devez choisir entre les coordonnées de fenêtre et d'écran, car
votre application n'utilise pas tout l'écran
au format letterbox. Grâce au
letterbox, les coordonnées indiquées à partir de l'origine de l'écran ne sont pas identiques aux coordonnées
depuis l'origine de la fenêtre. Vous pouvez transformer les coordonnées de l'écran en
coordonnées selon vos besoins à l'aide de getLocationOnScreen(). L'image suivante
affiche les différences de coordonnées lorsque le contenu est au format letterbox:
<ph type="x-smartling-placeholder"></ph>
<ph type="x-smartling-placeholder"></ph>
Figure 9 : Coordonnées de la fenêtre ou de l'écran
au format letterbox.
Testez tous les écrans et expériences de votre application. Effectuez des tests sur des appareils avec des
types d'encoches, si possible. Si votre appareil n'est pas doté d'une encoche, vous pouvez
simuler des configurations d'encoche courantes sur n'importe quel appareil ou émulateur exécutant Android ;
version 9 ou ultérieure. Pour ce faire, procédez comme suit:
Faites défiler l'écran Developer options (Options pour les développeurs) vers le bas jusqu'à la section Drawing (Dessin).
puis sélectionnez Simuler un écran avec une encoche.
Sélectionnez le type d'encoche.
<ph type="x-smartling-placeholder"></ph>
<ph type="x-smartling-placeholder"></ph>
Figure 10. Ces options vous permettent de tester l'efficacité
le rendu du contenu.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2024/08/22 (UTC).
[]
[]
{
"lastModified": "Dernière mise à jour le 2024/08/22 (UTC).",
"confidential": False
}