Android active un mode de compatibilité pour les applications qui déclarent l'orientation ou les restrictions de redimensionnement. Le mode de compatibilité garantit un comportement acceptable de l'application les appareils à grand écran et les téléphones à clapet pliables, mais avec une facilité d'utilisation non optimale.
Les forçages par application permettent aux fabricants d'appareils de modifier le comportement des applications pour améliorer l'expérience utilisateur ou empêcher le plantage des applications appareils spécifiques.
Appareils de référence
Des forçages par application peuvent être requis sur les appareils suivants en raison de paramètres inhabituels configurations ou configurations non compatibles avec les applications:
- Tablettes:l'orientation naturelle de certaines tablettes, comme la Pixel Tablet,
est le format paysage. Un appareil est dans son orientation naturelle lorsqu’il
Retours pour
Display#getRotation()
Surface.ROTATION_0
Si les applications supposent queROTATION_0
est en mode portrait, les mises en page de l'application et l'aperçu de l'appareil photo peuvent ne pas correspondre à l'écran de l'appareil. - Appareils pliables en mode paysage:certains appareils pliables, comme le Pixel Fold, sont soit en mode portrait lorsqu'il est plié, soit en mode paysage lorsqu'il est déplié. Si les applications supposent que l'orientation est dépliée en mode portrait, le scintillement boucles ou problèmes de mise en page.
- Téléphones à clapet pliables:les téléphones à clapet pliables sont généralement en mode portrait. l'orientation. Mais, lorsqu'ils sont pliés, les téléphones ont généralement un petit écran en mode paysage. Les applications doivent identifier et s'adapter orientations des écrans.
Problèmes de compatibilité courants
Les applications rencontrent le plus souvent des problèmes de compatibilité en raison de leur orientation les restrictions de redimensionnement et de format, la gestion incorrecte des l'orientation de l'aperçu de l'appareil photo et les API mal utilisées.
Format letterbox
Le format letterbox positionne l'application au centre de l'écran ou, sur les grands écrans, d'un côté ou de l'autre pour y accéder facilement. Mats (barres de couleur unie ou un fond d'écran flouté) remplissez la zone d'affichage inutilisée sur les côtés ou en haut et en bas de l'application.
Le format letterbox est souvent appliqué sur les appareils à grand écran, car les dimensions et les proportions de l'écran de l'appareil sont généralement différentes de celles de l'écran standard pour lesquels la plupart des applications sont conçues.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing.png?authuser=6&hl=fr)
Figure 1 : Une application limitée au mode portrait est mise au format letterbox sur une tablette en format paysage et sur un appareil pliable.
Problème
L'appli n'est pas compatible avec toutes les configurations d'affichage, car elle a corrigé les un format fixe ou n'est pas redimensionnable.
Les paramètres de configuration qui contrôlent l'orientation et le redimensionnement de l'application incluent suivantes:
screenOrientation
: spécifie une orientation fixe pour une application. Les applications peuvent également définir l'orientation au moment de l'exécution en utilisantActivity#setRequestedOrientation()
resizeableActivity
: indique si le système peut redimensionner les applications pour les adapter aux fenêtres de différentes dimensions. Sur Android 11 (niveau d'API) 30) et versions antérieures, indique si les applications sont compatibles ou non avec le mode multifenêtre. Activé Android 12 (niveau d'API 31) ou version ultérieure, spécifie si les applications sont compatibles ou non mode multifenêtre sur les petits écrans ( classe de taille de fenêtre). Sur Android 12 ou version ultérieure, les applications prend en charge le mode multifenêtre sur les grands écrans (fenêtres moyennes ou étendues). classe de taille) quel que soit ce paramètre.maxAspectRatio
: spécifie le format maximal. pris en charge par l'application. Seules les applications avecresizeableActivity
défini surfalse
peuvent définirmaxAspectRatio
.minAspectRatio
: spécifie le format minimal. pris en charge par l'application. Seules les applications avecresizeableActivity
défini surfalse
peuvent définirminAspectRatio
.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_issue.png?authuser=6&hl=fr)
Une application limitée au mode portrait et inutilisable sur l'appareil en mode paysage.
Optimisation
L'application doit être compatible avec tous les appareils et l'affichage en mode multifenêtre différentes orientations et tailles. Supprimer toutes les orientations et tous les formats fixes les restrictions liées aux mises en page et au fichier manifeste de votre application.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_optimization.png?authuser=6&hl=fr)
Une application compatible avec toutes les orientations d'appareil.
Solution de compatibilité
Si une application à orientation ou format fixe s'exécute dans une fenêtre où l'application n'est pas directement compatible avec la taille ou l'orientation de la fenêtre, Android met l'application au format letterbox pour préserver la continuité.
À partir d'Android 12 (niveau d'API 31) et ensuite avec la version 12L (niveau d'API 32), la plateforme applique diverses améliorations aux applications au format letterbox. Appareil les fabricants à implémenter les améliorations de l'interface utilisateur. Vous n'avez rien d'autre à faire pour votre application afin de bénéficier de ces améliorations.
Android 12 (niveau d'API 31) introduit les améliorations esthétiques suivantes, qui peuvent être configurés par les fabricants d'appareils:
- Angles arrondis : les angles de la fenêtre de l'application ont un aspect plus élégant.
- Transparence de la barre système:barres d'état et de navigation, qui se superposent application, sont semi-transparentes. Les icônes des barres sont donc toujours visibles en arrière-plan du format letterbox.
- Format configurable:vous pouvez ajuster le format de l'application. pour améliorer l'apparence de l'application.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing.png?authuser=6&hl=fr)
Figure 2. Application au format letterbox avec améliorations de l'interface utilisateur
La version 12L (niveau d'API 32) ajoute les améliorations fonctionnelles suivantes :
Positionnement configurable:sur les grands écrans, les fabricants d'appareils peuvent placez l'application sur le côté gauche ou droit de l'écran, les interactions des utilisateurs.
Refonte du bouton de redémarrage:les fabricants d'appareils peuvent autoriser le redémarrage. Bouton permettant d'accéder au mode de compatibilité de taille et de changer d'apparence pour une meilleure reconnaissance par les utilisateurs.
Android 13 (niveau d'API 33) ajoute une boîte de dialogue pédagogique à l'utilisateur sur le positionnement application au format letterbox à l'écran ou inclusion du format letterbox en mode Écran partagé:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing_user_dialog.png?authuser=6&hl=fr)
Figure 3. Application au format letterbox avec boîte de dialogue pédagogique à destination de l'utilisateur.
Mode de compatibilité de taille
Le mode de compatibilité de taille est un format letterbox qui inclut une commande de redémarrage. La permet aux utilisateurs de redémarrer l'application et de redessiner l'écran. Appel Android mode de compatibilité de taille pour les applications qui ne sont pas redimensionnables. Lorsqu'un l'activité est déplacée vers un conteneur d'affichage incompatible avec le le système peut redimensionner l'application pour qu'elle occupe tout l'écran au moins une dimension.
Voici les modifications apportées à la configuration de l'appareil qui peuvent déclencher le mode de compatibilité de taille :
- Rotation de l'appareil
- Pliage ou dépliage d'appareils pliables
- Passage du mode plein écran au mode Écran partagé
Problème
Le mode de compatibilité de taille s'applique généralement aux activités limitées l'orientation ou le format et sont configurés (ou déterminés par le système) pour non redimensionnables.
Votre application est considérée comme redimensionnable et ne sera pas dimensionnée. mode de compatibilité, s'il répond à l'un des critères suivants:
- Elle est redimensionnable avec
resizeableActivity="true"
. - Elle est compatible avec le mode Picture-in-picture (PIP).
- Elle est intégrée.
- Le forçage
FORCE_RESIZE_APP
par application est-il appliqué par Le fabricant de l'appareil (les propriétés définies par l'application sont ignorées)
Si votre application ne remplit pas l'une de ces conditions, elle est considérée comme non redimensionnables et qui pourraient être placés en mode de compatibilité de taille.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_issue.gif?authuser=6&hl=fr)
Une application non redimensionnable plante en mode multifenêtre.
Optimisation
L'application doit être compatible avec toutes les tailles d'écran. Faites en sorte que votre application puisse être redimensionnée en définissant
Attribut android:resizeableActivity
de <activity>
ou <application>
sur true
dans
fichier manifeste d'application. Concevez des mises en page responsives/adaptatives pour votre application. Pour plus
pour en savoir plus, consultez
Assurer la compatibilité avec différentes tailles d'écran et prendre en charge
mode multifenêtre.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_optimization.gif?authuser=6&hl=fr)
L'application fonctionne avec toutes les tailles de fenêtre.
Solution de compatibilité
Android place une application en mode de compatibilité de taille lorsque le système détermine la l'affichage de l'application au format letterbox peut être amélioré en redimensionnant l'application pour qu'elle occupe la fenêtre d'affichage dans au moins une dimension. Le système affiche une commande de redémarrage qui recrée le processus de l'application, en recréant l'activité et en redessinant l'écran. Consultez aussi la page Présentation des processus et des threads.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_workaround.gif?authuser=6&hl=fr)
Une application au format portrait uniquement mise au format letterbox en mode paysage, redimensionnée par une commande de redémarrage.
Boucles de clignotement
Lorsqu'une application n'est pas compatible avec toutes les orientations d'écran, elle peut répéter de nouvelles orientations lorsqu'un changement de configuration se produit, ce qui crée un qui fait clignoter l'écran ou fait pivoter l'application à l'infini.
Problème
Sur Android 12 (niveau d'API 31) ou version ultérieure, les fabricants d'appareils peuvent configurer
leurs appareils d'ignorer les restrictions d'orientation
spécifiées par les applis et, à la place,
pour appliquer des modes de compatibilité. Par exemple, un appareil pliable peut ignorer une
android:screenOrientation="portrait"
de l'activité
lorsque l'activité s'affiche sur la taille d'une tablette en mode paysage,
à l'écran intérieur.
Si les restrictions d'orientation d'une application sont ignorées, l'application peut utiliser la programmation
définir son orientation en appelant
Activity#setRequestedOrientation()
L'appel
déclenche un redémarrage de l'application si celle-ci ne gère pas les modifications de configuration (voir
Gérer les modifications de configuration). Après le
redémarre, les restrictions d'orientation de l'application sont à nouveau ignorées, l'application se répète
l'appel à setRequestedOrientation()
, celui-ci déclenche un redémarrage de l'application, et
ainsi de suite dans une boucle
auto-perpétuelle.
Vous pouvez également rencontrer ce problème
l'orientation naturelle (l'orientation usuelle,
déterminé par Android) d'un écran d'appareil est en mode Paysage (c'est-à-dire qu'il appelle
Retours de Display#getRotation()
Surface.ROTATION_0
lorsque l'appareil est en mode paysage
ratio). Par le passé, les applications considéraient que Display.getRotation() =
Surface.ROTATION_0
signifie que l'appareil était en mode portrait, mais ce n'est pas le cas.
toujours le cas, par exemple, sur l'écran intérieur de certains appareils pliables et
sur certaines tablettes.
Une application en mode paysage sur un écran intérieur pliable peut vérifier
rotation de l'écran, recevoir la valeur ROTATION_0
, supposer l'orientation naturelle
de l'appareil en mode portrait, et appelez
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
pour reconfigurer la mise en page de l'application Après le redémarrage de l'application (en mode Paysage
l'orientation), il peut à nouveau vérifier la rotation de l'écran, recevoir la valeur
ROTATION_0
, appeler
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
la boucle infinie.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_issue.gif?authuser=6&hl=fr)
Une application en mode paysage uniquement sur un écran en mode portrait appelle Activity#setRequestedOrientation()
de façon répétée.
Optimisation
Les applications ne doivent pas effectuer les opérations suivantes :
- Définissez une orientation par défaut avec
Activity#setRequestedOrientation()
dans d'activitéonCreate()
, car la requête d'orientation peut être déclenchés de manière inattendue par des modifications de configuration non gérées - Supposer que l'orientation naturelle de l'appareil (
ROTATION_0
) est le mode portrait - Définissez l'orientation en fonction de signaux qui ne sont pas liés à la taille de la fenêtre actuelle, par exemple
en tant que
Display#getRotation()
, la présence d'unFoldingFeature
ou API obsolètes.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_optimization.gif?authuser=6&hl=fr)
L'application gère le changement de configuration et ne présente aucune restriction d'orientation. Par conséquent, elle n'entre pas dans une boucle de clignotement.
Solution de compatibilité
Android ignore les appels à Activity#setRequestedOrientation()
dans les cas suivants
situations suivantes:
L'activité a déjà été relancée à partir d'un appel précédent à la méthode ou le traitement de rotation forcée pour compatibilité de l'appareil photo a été activé (voir la section Caméra (Aperçu) ci-dessous).
Les fabricants d'appareils peuvent appliquer ce comportement à une application
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
L'activité a effectué plus de deux requêtes d'orientation en une seconde, ce qui indique qu'une boucle s'est produite. Parmi les deux requêtes de la boucle, Android utilise celle qui maximise la zone d'affichage de l'application.
Les fabricants d'appareils peuvent appliquer ce comportement à une application
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Aperçu de l'appareil photo
L'aperçu de l'appareil photo (ou le viseur) des applications d'appareil photo peut être mal aligné ou déformé sur les tablettes, les ordinateurs portables et les écrans pliables.
Problème
Le document de définition de compatibilité Android indique qu'un le capteur d'image de l'appareil photo "DOIT être orienté de sorte que la dimension longue de l'appareil photo" s'aligne sur la dimension longue de l'écran. »
Les applications supposent souvent que l'orientation de l'appareil et celle du capteur de l'appareil photo sont en mode portrait, une hypothèse raisonnable pour les téléphones mobiles standards. Toutefois, l'orientation naturelle des tablettes et des ordinateurs portables en mode paysage. De plus, les nouveaux facteurs de forme, comme les pliables, peuvent disposer différentes orientations et plusieurs capteurs de l'appareil photo dans différentes orientations.
Lancer une activité avec une orientation de caméra à laquelle l'application ne s'attend pas ou le passage d'un appareil photo ou d'un écran à l'autre (pour les appareils pliables) peut entraîner un aperçu de l'appareil photo mal aligné ou déformé.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_issue.png?authuser=6&hl=fr)
L'aperçu de l'appareil photo est déformé et mal aligné sur un appareil pliable à grand écran.
Optimisation
Les applications d'appareil photo doivent identifier et gérer correctement l'orientation de l'appareil et l'appareil photo. l'orientation du capteur pour afficher un aperçu de l'appareil photo correctement aligné et à l'échelle. Les applis doivent calculer la rotation de l'appareil, la rotation des capteurs et l'écran ou la fenêtre format, puis appliquez les résultats à l'aperçu de l'appareil photo. Pour obtenir des consultez les articles Aperçu de l'appareil photo et Présentation de l'appareil photo Viseur :
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_optimization.png?authuser=6&hl=fr)
L'aperçu de l'appareil photo est correctement aligné et mis à l'échelle dans toutes les orientations d'appareil.
Solution de compatibilité
Un appareil est en orientation naturelle lorsque Display#getRotation()
renvoie Surface.ROTATION_0
. Le système calcule
CameraCharacteristics.SENSOR_ORIENTATION
en fonction de l'orientation naturelle de l'appareil. Android aligne la fenêtre en mode portrait de
les applications limitées au mode portrait avec l'orientation naturelle de l'appareil, ce qui
est ce à quoi s'attendent
la plupart des applications. Android recadre également l'image du capteur de l'appareil photo lorsque
l'orientation du capteur est en mode paysage et l'aperçu de l'appareil photo est en mode portrait. Le point spécifique
des solutions de contournement
sont les suivantes:
Forcer la rotation des aperçus de l'appareil photo pour les applications limitées au mode portrait:applications limité à l'orientation portrait, attendez-vous à l'orientation naturelle de l'appareil et l'orientation du capteur de l'appareil photo en mode Portrait. Toutefois, sur Android 12, (niveau d'API 31) ou version ultérieure, les applications peuvent s'exécuter dans plusieurs orientations d'appareil : les fabricants d'appareils ignorent la spécification d'orientation.
Lorsqu'une application limitée au mode portrait est connectée à l'appareil photo, Android force fait pivoter l'application pour aligner la fenêtre de l'application en mode portrait avec l'orientation de l'appareil.
Sur certaines tablettes (voir les appareils de référence), l'application la fenêtre en mode portrait est pivotée en plein écran en mode portrait pour s'aligner l'orientation naturelle de l'appareil. L'application occupe la totalité de l'écran après avoir forcé l'appareil. la rotation des clés.
Tablette : forcez la rotation de l'application limitée au mode portrait.
Sur l'écran intérieur en mode paysage des appareils pliables (voir la documentation de référence appareils), les activités en mode portrait sont pivotées paysage pour l'adapter à l'orientation naturelle dépliée. L'application est au format letterbox après la rotation forcée.
Pliable : forcez la rotation de l'application limitée au mode portrait. L'application est également au format letterbox.
Recadrage de la caméra avant intérieure:le capteur de la caméra avant intérieure de certains les appareils pliables sont en mode paysage. En plus de forcer la rotation aperçu de l'appareil photo sur l'écran intérieur de l'appareil pliable, Android recadre la partie avant intérieure champ de vision (paysage) de la caméra, de sorte que le capteur capture une vue située en face l'orientation de l'appareil.
Forcer l'actualisation des aperçus de l'appareil photo:le système passe en revue l'activité. méthodes
onStop()
etonStart()
(par défaut) ouonPause()
etonResume()
(appliquée par OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE forçage par application) après la rotation forcée pour s'assurer que l'aperçu de l'appareil photo est s'affiche correctement.Mise à l'échelle du format:le système modifie le format de manière dynamique. l'aperçu de l'appareil photo ayant fait l'objet d'une rotation forcée vers un format minimal plus élevé, ce qui permet de s'assurer que l'aperçu de l'appareil photo est correctement mis à l'échelle.
Les développeurs d'applications peuvent ignorer ces solutions si les applications gèrent l'aperçu de l'appareil photo. correctement. Consultez Forçages par application.
Mauvaises utilisations courantes d'API
Android prend en charge des fonctionnalités telles que le mode multifenêtre et comme les appareils pliables, les anciennes API ont été abandonnées et remplacées par Des API à jour, compatibles avec toutes les tailles d'écran et tous les types d'appareils . Toutefois, les API obsolètes sont toujours disponibles et la compatibilité avec d'autres appareils.
Certaines API View
sont conçues à des fins particulières qui ne sont pas toujours adaptées
par les développeurs.
Problème
Les développeurs continuent à utiliser les API Display
obsolètes et supposent à tort que le
Les API renvoient les limites de l'application au lieu des limites de la zone d'affichage de l'appareil. Les développeurs
utilisent à tort des API de vues spéciales pour obtenir des métriques d'affichage générales.
Il en résulte des erreurs de calcul lors du repositionnement des éléments d'interface utilisateur après la fenêtre de l'application.
de redimensionnement, ce qui entraîne des problèmes de mise en page.
API Display obsolètes et couramment utilisées de façon incorrecte :
Pour en savoir plus, consultez Prenez en charge le mode multifenêtre.
API View mal utilisées:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_issue.png?authuser=6&hl=fr)
L'API obsolète calcule mal les limites de l'application. Du contenu de l'application ne s'affiche pas à l'écran.
Optimisation
Ne vous appuyez jamais sur la taille d'écran physique pour positionner les éléments d'interface utilisateur. Migrez votre
vers des API basées sur WindowMetrics
, y compris :
API WindowManager
:
Plate-forme :
Jetpack:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_optimization.png?authuser=6&hl=fr)
L'API calcule correctement les métriques de la fenêtre de l'application.
Solution de compatibilité
Deux forçages permettent d'ajuster les API Display
obsolètes et les API View
mal utilisées pour
renvoyer les limites de l'application:
ALWAYS_SANDBOX_DISPLAY_APIS
pour Display
les API ; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
pour les API View
. ALWAYS_SANDBOX_DISPLAY_APIS
est également appliqué par défaut aux
les applications éligibles au mode de compatibilité de taille.
Activités transparentes
Les activités transparentes sont le résultat de styles d'arrière-plan transparents, par Exemple:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Les thèmes associés aux boîtes de dialogue, comme Theme.MaterialComponents.Dialog
, peuvent
inclure des styles qui rendent les activités transparentes.
Les activités transparentes n'occupent pas tout l'espace d'affichage disponible, ce qui fait sont difficiles à gérer, car la zone d'affichage disponible les changements de configuration tels que la rotation de l'appareil, le pliage et le dépliage de l'appareil, et mode multifenêtre.
Problème
Une activité transparente doit respecter les limites de la première activité opaque. sous l'activité transparente dans la pile d'activités de la tâche. Cependant, une couche opaque une activité qui lance une boîte de dialogue d'autorisation peut être trampoline (activité qui lance une autre activité, puis disparaît) et Le système ne peut donc pas déterminer les limites de l'activité de trampoline lancé l'activité de la boîte de dialogue d'autorisation transparente.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_issue.png?authuser=6&hl=fr)
Boîte de dialogue mal positionnée, car l'activité a été lancée depuis un trampoline.
Optimisation
Les activités transparentes héritent des contraintes de la couche opaque supérieure activité située en dessous d'eux dans la pile d'activités d'une tâche. L'activité opaque doit être disponibles pendant tout le cycle de vie de l'activité transparente, de sa création à sa destruction. C'est pourquoi vous ne devez pas envoyer de demandes d'autorisation provenant les activités de trampoline.
Si une activité de trampoline lance une demande d'autorisation, il est possible que l'utilisateur ne soit pas pour voir la boîte de dialogue d'autorisation, car l'activité du trampoline détruit avant que l'utilisateur n'ait eu la possibilité de répondre à la boîte de dialogue, et la les dimensions et la position de l'activité de la boîte de dialogue ont pu être calculées incorrectement.
Les applications doivent toujours lancer les demandes d'autorisation à partir d'activités restantes est visible jusqu'à ce que l'utilisateur prenne une décision.
Coins arrondis
Une activité peut être transparente en raison d'un style qui spécifie l'arrière-plan la transparence ou parce que le contenu de l'activité ne remplit pas de l'espace d'affichage. Si une activité transparente remplit l'espace d'affichage disponible, la applique automatiquement des angles arrondis à l'activité lorsqu'elle est configurée pour par le fabricant de l'appareil. Mais, si une activité transparente (comme boîte de dialogue d'autorisation) n'occupe pas l'espace disponible, c'est à vous de décider appliquer ou non des angles arrondis.
Les boîtes de dialogue d'autorisation n'occupent pas l'espace d'affichage disponible, car elles la mise en page utilise généralement LayoutParams.WRAP_CONTENT au lieu de LayoutParams.MATCH_PARENT.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_optimization.png?authuser=6&hl=fr)
Boîte de dialogue avec des angles arrondis correctement positionnés sur l'activité de lancement visible.
Solution de compatibilité
Les activités qui lancent les boîtes de dialogue restent visibles tant que l'utilisateur n'a pas a répondu à la boîte de dialogue.
Le système garantit qu'une activité transparente hérite de toutes les contraintes du première activité opaque sous l'activité transparente dans la pile d'activités, y compris les contraintes liées aux éléments suivants:
- Mode de compatibilité de taille
- Orientation
- Format
Jeux Unity
Sur Android, les jeux Unity s'exécutent en plein écran ou en mode multifenêtre. Toutefois, De nombreux jeux Unity perdent leur focus et arrêtent de dessiner du contenu lorsque l'application est placée dans mode multifenêtre.
Problème
Unity a ajouté un élément Resizable Window
option dans Unity 2019.4 pour prendre en charge le mode multifenêtre sur Android. Toutefois,
la mise en œuvre initiale n'a pas réagi au cycle de vie de l'activité
mode multifenêtre, ce qui entraîne
UnityPlayer pour suspendre la lecture lorsque l'application perd son focus. Le lecteur a affiché un
un écran noir ou la dernière image figée du jeu. Le jeu n'a repris que lorsque
l'utilisateur a appuyé sur l'écran. De nombreuses applications utilisant le moteur Unity sont confrontées à ce problème et
s'affiche sous la forme d'une fenêtre noire en mode multifenêtre.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_issue.gif?authuser=6&hl=fr)
Le jeu perd son focus en mode multifenêtre et s'affiche sous la forme d'une fenêtre noire.
Optimisation
Mettez à niveau Unity vers la version 2019.4.40 ou une version ultérieure, puis réexportez votre jeu. Gardez le
Option Resizable Window
cochée dans le
Paramètres du lecteur Android, sinon
le jeu se met en pause lorsqu'il n'est pas au premier plan, même s'il est entièrement visible dans
mode multifenêtre.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_optimization.gif?authuser=6&hl=fr)
Le jeu affiche correctement le contenu en mode multifenêtre, même s'il n'est pas au premier plan.
Solution de compatibilité
Les fabricants d'appareils peuvent appliquer le
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
forçage par application pour fournir un faux événement de focus à une application dans
mode multifenêtre. Le forçage permet à l'activité de redessiner le contenu et
ne seront pas masquées.
Tester votre application pour identifier les problèmes de compatibilité
Pour tester votre application et comprendre son comportement avec différents facteurs de forme, procédez comme suit : les ressources suivantes:
- Streaming sur l'appareil:pour tester votre application sur des appareils en production (y compris appareils de référence) hébergés dans les centres de données Google, consultez Streaming sur les appareils Android, avec la technologie de Firebase
- Emulators in Android Studio Hedgehog (Émulateurs dans Android Studio Hedgehog) : pour découvrir comment créer pour les appareils de référence, consultez Créer et gérer des appareils virtuels
- Émulateur redimensionnable Android Studio:pour en savoir plus sur l'accès aux appareils appareils, consultez Exécuter des applications sur Android Emulator.
Est au format letterbox
Vérifiez que chaque activité peut utiliser tout l'espace d'affichage disponible pour l'application. Tout d'abord, déclarez le code suivant dans votre dossier de test :
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
Exécutez ensuite un test pour vérifier le comportement et vous assurer que l'activité cible n'est pas au format letterbox:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
Idéalement, n'exécutez ce type de test que jusqu'à ce qu'il réussisse et confirme que l'état les activités occupent tout l'espace d'affichage disponible pour l'application. Tester votre application sur tous les types d'appareils afin de garantir un comportement cohérent.
Forçages par application
Android fournit des forçages qui modifient le comportement configuré des applications. Pour
Par exemple, le forçage FORCE_RESIZE_APP
indique au
pour contourner le mode de compatibilité de taille et redimensionner l'application pour l'adapter à l'écran
même si resizeableActivity="false"
est
spécifié dans le fichier manifeste de l'application.
Les fabricants d'appareils appliquent des forçages à certaines applications ou à toutes les applications appareils à grand écran spécifiques. Sur Android 14 (niveau d'API 34) ou version ultérieure, les utilisateurs peut appliquer des forçages aux applications via les paramètres de l'appareil.
Forçages par application par utilisateur
Sur Android 14 ou version ultérieure, un menu de paramètres permet aux utilisateurs de modifier l'aspect le ratio d'applications. Les appareils à grand écran, tels que la référence appareils implémentent le menu.
Le menu contient la liste de toutes les applications installées sur l'appareil. Les utilisateurs choisissent puis définissez le format de l'application sur 3:4, 1:1, plein écran ou une autre valeur configuré par le fabricant de l'appareil. Les utilisateurs peuvent également rétablir le format la valeur par défaut de l'application, spécifiée dans le fichier manifeste de l'application.
Les applications peuvent désactiver le remplacement de compatibilité en définissant les balises PackageManager.Property
suivantes:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Pour désactiver le forçage de compatibilité du format de l'utilisateur, ajoutez la propriété dans le fichier manifeste de votre application et définissez la valeur sur
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
Votre application sera exclue de la liste des applications dans les paramètres de l'appareil. Utilisateurs ne peuvent pas remplacer le format de l'application.
Définir la propriété sur
true
n'a aucun effet.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Pour désactiver l'option plein écran de la compatibilité avec le format utilisateur remplacez la propriété, ajoutez la propriété au fichier manifeste de votre application et définissez sa valeur sur
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
L'option plein écran est supprimée de la liste des options de format dans paramètres de l'appareil. Les utilisateurs ne pourront pas appliquer votre application.
Définir cette propriété sur
true
n'a aucun effet.
Optimiser votre application pour tous les écrans:ne définissez pas de restrictions de format dans votre application. Utilisez des classes de taille de fenêtre pour prendre en charge différentes mises en page en fonction de l'espace d'affichage disponible.
Forçages par application du fabricant de l'appareil
Les fabricants d'appareils appliquent des forçages par application sur certains appareils. Les appareils de référence peuvent appliquer certains forçages à un de nombreuses applications par défaut.
Les applications peuvent désactiver la plupart des forçages (voir la section Par application dans le tableau ci-dessous).
Vous pouvez tester votre application avec les forçages activés ou désactivés à l'aide de la compatibilité (consultez la section Outils de framework de compatibilité). Lorsque cette option est activée, les forçages s'appliquent à l'ensemble de l'application.
Vous pouvez également utiliser Android Debug Bridge (adb) pour activer ou désactiver les forçages et déterminer ceux qui s'appliquent à votre application.
Activez ou désactivez les forçages comme suit :
adb shell am compat enable/disable <override name/id> <package>
Pour les appareils de référence, vérifiez les forçages qui s'appliquent à votre application:
adb shell dumpsys platform_compat | grep <package name>
Le tableau suivant répertorie les forçages disponibles et indique comment optimiser votre application pour qu'elle n'ait pas besoin d'utiliser des forçages. Vous pouvez ajouter des indicateurs de propriété au fichier manifeste de votre application pour désactiver certains forçages.
Forçages par application | |||
---|---|---|---|
Type | Nom | ID | Description |
Redimensionnement | FORCE_RESIZE_APP | 174042936 | Contourne le mode de compatibilité de taille pour l'application lors des modifications de configuration. |
FORCE_NON_RESIZE_APP | 181136395 | Force le mode de compatibilité pour l'application en cas de modification de la configuration. | |
Format | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Forçage faisant office de gardien et qui doit être activé pour appliquer tout autre forçage de format. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Si cette option est activée (valeur par défaut), le champ d'application du forçage est limité aux activités en mode portrait. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Définit le format minimal sur 3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Définit le format minimal sur 16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Modifie le format minimal pour qu'il s'adapte à 50 % de la taille de l'écran (ou du format de l'écran partagé). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Désactive le forçage du format minimal afin que les applications s'affichent en plein écran lorsque l'appareil est en mode portrait. | |
Orientation | OVERRIDE_ANY_ORIENTATION | 265464455 | Permet de forcer n'importe quelle orientation. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | Ignore les restrictions d'orientation, de redimensionnement et de format. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Force l'orientation en mode portrait lorsque l'orientation d'une activité n'est pas définie. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Force l'orientation nosensor (utiliser l'orientation naturelle de l'appareil) lorsque l'orientation d'une activité n'est pas définie. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Fait pivoter les applications limitées au mode paysage de 180 degrés. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Limite le champ d'application du forçage de l'orientation aux moments où l'application est connectée à l'appareil photo. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Définit l'orientation naturelle fixe paysage pour l'écran lorsqu'une tâche est en plein écran (y compris au format letterbox). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Ignore les requêtes d'orientation de l'application pour éviter les boucles infinies de rotation. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Ignore les requêtes d'orientation répétées lors du redémarrage d'une activité. Si Android détecte qu'une application demande au moins deux nouvelles orientations en une seconde, le système considère qu'il s'agit d'une boucle de rotation infinie et applique le forçage. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Empêche la mise au format letterbox en désactivant le paramètre de requête d'orientation du fabricant de l'appareil. | |
API bac à sable | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Empêche la modification du comportement de toute API d'affichage. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Force les API Display dans l'application à renvoyer les limites de l'application. Les API Display renvoient les limites de zone d'affichage logique, mais l'application suppose parfois que les API Display renvoient les limites de l'application, ce qui entraîne des problèmes d'UI. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Force les API View utilisées dans l'application à renvoyer les limites de l'application. Les API View renvoient les limites de zone d'affichage logique, mais l'application suppose parfois que les API View renvoient les limites de l'application, ce qui entraîne des problèmes d'UI. |
|
Compatibilité d'appareil photo | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Désactive la rotation forcée. Par défaut, la rotation de toutes les applications d'appareil photo à orientation fixe est forcée lorsque l'aperçu de l'appareil photo est ouvert. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Supprime l'actualisation forcée par défaut qui s'applique lors de la rotation forcée d'un aperçu d'appareil photo. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Remplace l'actualisation forcée par une actualisation en douceur en cas de rotation forcée d'un aperçu d'appareil photo, ce qui permet de conserver l'état lors de la rotation forcée. Par défaut, Android applique une actualisation forcée lorsque la rotation de l'aperçu de l'appareil photo est forcée. L'actualisation forcée peut entraîner une perte d'état ou un écran noir pour les applications, en fonction de la mise en cache de leur état précédent. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Recadre le tampon d'image de la caméra avant intérieure. Si le forçage est désactivé, le recadrage de la caméra avant intérieure est supprimé et le champ de vision de l'aperçu de l'appareil photo est augmenté. Par défaut, sur certains appareils pliables (voir les appareils de référence), le système recadre l'aperçu de l'appareil photo de toutes les applications d'appareil photo lorsque vous utilisez la caméra avant intérieure. | |
Divers | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Empêche l'application d'afficher un écran noir lorsqu'elle perd son focus en mode Écran partagé. L'application attend le retour du focus avant de dessiner son contenu. L'application peut donc se figer ou afficher un écran noir. Le forçage permet à Android d'envoyer un faux événement de focus à l'application, ce qui lui indique de recommencer à dessiner le contenu. |
FORCE_RESIZE_APP
Force le redimensionnement des packages auxquels le forçage est appliqué. Non détermine si l'application peut être mise en mode multifenêtre, mais autorise l'accès application de redimensionner sans passer en mode de compatibilité de taille lorsque l'écran est redimensionné.
Comment les applications peuvent obtenir le même résultat que le forçage
Dans le fichier manifeste de l'application, définissez le paramètre
android:resizeableActivity
à true
ou, à
prendre en charge le redimensionnement tout en désactivant le mode multifenêtre avec
android:resizeableActivity=false
, définissez android.supports_size_changes
l'indicateur de métadonnées sur true
.
Comment optimiser les applications
Utilisez des mises en page responsives/adaptatives pour permettre aux applications de s'adapter à toutes les tailles d'écran et et différents formats. Voir Assurer la compatibilité avec différentes tailles d'écran.
Comment désactiver ou refuser le forçage
Définissez l'indicateur de propriété PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
sur
false
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage et faire en sorte que l'application puisse être redimensionnée :
adb shell am compat enable FORCE_RESIZE_APP <package>
Pour supprimer le forçage :
adb shell am compat disable FORCE_RESIZE_APP <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
FORCE_NON_RESIZE_APP
Force le non-redimensionnement des packages auxquels le forçage est appliqué. passer en mode de compatibilité de taille en cas de modification de la configuration.
Comment les applications peuvent obtenir le même résultat que le forçage
Définissez à la fois l'attribut android:resizeableActivity
et
Indicateur de métadonnées android.supports_size_changes
sur false
dans le fichier manifeste de l'application
et déclarez une restriction d'orientation ou de format.
Comment optimiser les applications
Toutes les applications dont le comportement est correct en cas de redimensionnement doivent
android:resizeableActivity
ou android.supports_size_changes
défini sur true
.
Toutes les autres applications doivent être améliorées afin que leur comportement soit correct en cas de redimensionnement. Voir
android:resizeableActivity.
Comment désactiver ou refuser le forçage
Définissez l'indicateur de propriété PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
sur
false
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage et faire en sorte que l'application ne puisse pas être redimensionnée :
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
Pour supprimer le forçage :
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_MIN_ASPECT_RATIO
Contrôleur pour tous les forçages qui forcent un format minimal donné.
Comment les applications peuvent obtenir le même résultat que le forçage
Définissez android:minAspectRatio
au niveau de l'activité ou de l'application.
Comment optimiser les applications
Ne définissez pas de restrictions de format dans votre application. Assurez-vous que votre application est compatible avec
différentes tailles d'écran. Utiliser des classes de taille de fenêtre
pour prendre en charge différentes mises en page en fonction de l'espace dont dispose votre application
l'écran. Consultez l'API WindowSizeClass
Compose.
et l'API View WindowSizeClass
.
Comment désactiver ou refuser le forçage
Spécifiez une restriction de format ou définissez l'indicateur de propriété
De PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Limite les paramètres d'application qui forcent un format minimal donné pour les activités.
en mode portrait uniquement. Activés par défaut et ne s'appliquent qu'à
si OVERRIDE_MIN_ASPECT_RATIO
est également activé.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment optimiser les applications
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
Définit le format minimal de l'activité sur une valeur moyenne (3:2).
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment optimiser les applications
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Définit le format minimal de l'activité sur une valeur élevée (16:9).
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment optimiser les applications
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
Permet l'utilisation du format d'écran partagé. Autorise une appli à utiliser tous les l'espace disponible en mode Écran partagé, évitant ainsi le format letterbox.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment optimiser les applications
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
Désactive le forçage du format minimal en plein écran en mode portrait pour utiliser tous l'espace disponible sur l'écran.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment optimiser les applications
Voir OVERRIDE_MIN_ASPECT_RATIO.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_MIN_ASPECT_RATIO.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_ANY_ORIENTATION
Active les forçages suivants pour remplacer n'importe quelle orientation:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE (PAYSAGE_RÉVERSIBLE)
Comment les applications peuvent obtenir le même résultat que le forçage
Définissez l'attribut du fichier manifeste activity:screenOrientation
.
ou utiliser l'API Activity#setRequestedOrientation()
.
Comment optimiser les applications
Votre application doit être compatible avec toutes les orientations. Un changement d'orientation
est un
de configuration, qui peut être gérée de deux manières: en laissant
de détruire et recréer l'application, ou de gérer les modifications de configuration
vous-même. Si vous gérez vous-même les modifications de configuration, l'état de l'application peut être
conservées à l'aide de ViewModel
. Dans de très rares cas, vous pouvez décider de verrouiller
l'orientation sur les petits écrans uniquement, même si cela risque de ne pas être aussi bien mis à l'échelle
permettant à l'utilisateur de faire pivoter
l'application selon les besoins. Sur Android 12L et versions ultérieures,
l'orientation fixe peut être remplacée par la configuration de l'appareil. Pour plus
des informations sur la gestion des modifications de configuration et la prise en charge
consultez la section Gérer les modifications de configuration.
Présentation de ViewModel et Orientation de l'application limitée activée
sur les téléphones, mais pas sur les appareils à grand écran.
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_ANY_ORIENTATION_TO_USER
Permet à l'application de remplir l'espace d'affichage disponible. Remplace toutes les orientations,
le redimensionnement et les restrictions de format spécifiées dans le fichier manifeste de l'application. Aussi
ignore les appels à
Activity#setRequestedOrientation()
Comment les applications peuvent obtenir le même résultat que le forçage
Ne définissez pas le fichier manifeste
android:screenOrientation
ou définissez l'attribut sur"user"
.Définir le fichier manifeste
android:resizeableActivity
àtrue
.Sur les petits écrans, pour permettre le redimensionnement de l'application tout en désactivant le mode multifenêtre avec
android:resizeableActivity=false
, définissez Indicateur de métadonnéesandroid.supports_size_changes
surtrue
. Ne pas définirminAspectRatio
etmaxAspectRatio
.
Comment optimiser les applications
activer la compatibilité de votre application avec toutes les orientations ; ne définissez pas de screenOrientation
dans le fichier manifeste de votre application. Prendre en charge le redimensionnement des applications
mode multifenêtre et tous les formats d'affichage en définissant
l'attribut android:resizeableActivity
dans le fichier manifeste de votre application sur true
. Voir
Assurer la compatibilité avec différentes tailles d'écran.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Active l'orientation portrait pour toutes les activités du package. À moins que OVERRIDE_ANY_ORIENTATION est activé, le forçage n'est utilisé que lorsqu'aucune autre orientation fixe n'a été spécifiée par l'activité.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Active l'orientation nosensor pour toutes les activités du d'un package. À moins que OVERRIDE_ANY_ORIENTATION ne soit activé, le forçage est utilisé uniquement lorsqu'aucune autre orientation fixe n'a été spécifiés par l'activité.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Active l'orientation reverseLandscape pour toutes les activités dans le package. À moins que OVERRIDE_ANY_ORIENTATION ne soit activé, le forçage est utilisé uniquement lorsqu'aucune autre orientation fixe n'a été spécifiés par l'activité.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
Limites OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, et OVERRIDE_LANDSCAPE_ORIENTATION_TO_INVERSE_LANDSCAPE pour ne prendre effet que lorsque la connexion de la caméra est active.
Comment les applications peuvent obtenir le même résultat que le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Indicateurs de propriété pour ajuster le forçage
Voir OVERRIDE_ANY_ORIENTATION
.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
Limite l'orientation de l'écran à l'orientation naturelle paysage lorsque l'élément les conditions suivantes sont remplies:
- L'activité est en plein écran.
- Propriété du composant de désactivation
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
n'est pas activé - Le paramètre "Ignorer les demandes d'orientation par le fabricant de l'appareil" est activé pour écran
- L'orientation naturelle de l'écran est en mode paysage.
Comment les applications peuvent obtenir le même résultat que le forçage
Non applicable. Le problème doit être résolu dans la logique de l'application.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Active la règle de compatibilité qui ignore la mise à jour de l'orientation de l'application en réponse à l'application
Appeler Activity#setRequestedOrientation()
lorsque l'application
est en cours de redémarrage ou dispose d'un traitement actif de compatibilité d'appareil photo.
Comment les applications peuvent obtenir le même résultat que le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
à true
.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Active la règle de compatibilité qui ignore l'orientation demandée par une application dans
réponse à l'appel de l'application
Activity#setRequestedOrientation()
plus de deux fois
en une seconde si une activité n'est pas mise au format letterbox pour obtenir une orientation fixe.
Comment les applications peuvent obtenir le même résultat que le forçage
Non applicable. Le problème doit être résolu dans la logique de l'application.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
jusqu'à
false
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Exclut les packages du comportement de requête d'orientation qui peut être activé par les fabricants d’appareils pour une zone d’affichage ou l’ensemble de l’écran.
Comment les applications peuvent obtenir le même résultat que le forçage
Non applicable. Le problème doit être résolu dans la logique de l'application.
Comment optimiser les applications
Voir OVERRIDE_ANY_ORIENTATION
.
Comment désactiver ou refuser le forçage
Aucun refus possible. Désactiver le forçage peut être dangereux si l'application n'est pas compatible avec un appareil sur lequel le fabricant a ignoré la requête d'orientation est activé. Contacter le développeur Android Relations pour désactiver le forçage.
Indicateurs de propriété pour ajuster le forçage
Aucun indicateur de propriété pour ce forçage.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
NEVER_SANDBOX_DISPLAY_APIS
Force le bac à sable de l'API Display
à ne jamais être appliqué aux packages
pour une activité au format letterbox ou en mode de compatibilité de taille. Les API Display
continuent de définir des limites de zone d'affichage.
Comment les applications peuvent obtenir le même résultat que le forçage
Déclarez le redimensionnement des activités en définissant
Attribut de fichier manifeste android:resizeableActivity
sur true
ou l'indicateur de métadonnées android.supports_size_changes
sur true
.
Comment optimiser les applications
Les applications qui déclarent être entièrement redimensionnables ne doivent jamais s'appuyer sur la taille d'affichage
pour positionner les éléments d'interface utilisateur. Migrez votre application vers des API à jour qui
fournir WindowMetrics
. Si vous utilisez Jetpack Compose, profitez de l'aide
API WindowSizeClass
pour dessiner l'UI en fonction de la quantité d'écran
zone de l'application sur l'écran actuel. Voir
Classes de taille de fenêtre.
Comment désactiver ou refuser le forçage
Aucun refus possible. Migrez vers des API non obsolètes.
Indicateurs de propriété pour ajuster le forçage
Aucun indicateur de propriété pour ce forçage.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
Pour supprimer le forçage :
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
ALWAYS_SANDBOX_DISPLAY_APIS
Force le bac à sable de l'API Display
à toujours être appliqué aux packages
quel que soit le mode de fenêtrage. Les API Display
fournissent toujours les limites de l'application.
Comment les applications peuvent obtenir le même résultat que le forçage
Déclarez le caractère non redimensionnable des activités en définissant
l'attribut android:resizeableActivity
à false
ou à
Définissez l'indicateur de métadonnées android.supports_size_changes
sur false
.
Comment optimiser les applications
Les applications qui déclarent être entièrement redimensionnables ne doivent jamais dépendre de la taille d'affichage
de positionner les éléments d'interface utilisateur. Migrez votre application des API obsolètes vers
Des API à jour qui fournissent WindowMetrics
. Voir
WindowMetricsCalculator
Comment désactiver ou refuser le forçage
Aucun refus possible. Migrez vers des API non obsolètes.
Indicateurs de propriété pour ajuster le forçage
Aucun indicateur de propriété pour ce forçage.
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Pour supprimer le forçage :
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Oblige les packages à mettre en bac à sable les API View
suivantes en fonction des limites de l'activité :
Comment les applications peuvent obtenir le même résultat que le forçage
Résolvez le problème dans le code de l'application à l'aide d'API qui fournissent les limites la fenêtre de l'application et ses décalages par rapport à la fenêtre de l'application plutôt que par rapport aux limites de l'écran de l'appareil et les décalages par rapport à l'écran de l'appareil.
Comment optimiser les applications
Les applications doivent utiliser les API View
, en tenant compte du risque de format letterbox
et le mode multifenêtre appliqué à l'application. Voir
WindowMetricsCalculator
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Désactive la rotation forcée. Améliore l'expérience utilisateur dans certaines applications.
Comment les applications peuvent obtenir le même résultat que le forçage
Définir l'indicateur de propriété
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
à false
.
Comment optimiser les applications
Ne vous appuyez pas sur l'orientation du capteur de l'appareil photo mise en cache ni aux informations sur l'appareil. Pour conseils sur la compatibilité de la caméra, consultez Présentation du viseur de l'appareil photo et de la compatibilité surfaces redimensionnables de votre caméra l'application.
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
à true
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage, ce qui supprime la rotation forcée :
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Pour supprimer le forçage, ce qui permet de forcer la rotation :
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
Désactive l'actualisation de l'activité après la rotation forcée. Améliore l'expérience utilisateur lorsque l'actualisation entraîne une perte d'état dans les applications.
Comment les applications peuvent obtenir le même résultat que le forçage
Définir l'indicateur de propriété
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
à false
.
Comment optimiser les applications
Voir OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION :
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
à true
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage, ce qui supprime l'actualisation de l'activité :
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Pour supprimer le forçage, ce qui permet l'actualisation de l'activité :
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
Génère les packages auxquels il est appliqué pour actualiser l'activité à l'aide d'un onResume()
.
→ onPause()
→ onResume()
cycle au lieu de onResume()
→
onStop()
→ onResume()
après la rotation forcée pour compatibilité de l'appareil photo.
Comment les applications peuvent obtenir le même résultat que le forçage
Définir l'indicateur de propriété
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
à true
.
Comment optimiser les applications
Voir OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION :
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
Force le recadrage de la sortie de l'appareil photo dans l'orientation opposée en mode portrait l'orientation de la caméra ne correspond pas à l'orientation naturelle de l'appareil. Nombreuses applications ne gérez pas cette situation et n'affichez pas d'images étirées dans le cas contraire.
Comment les applications peuvent obtenir le même résultat que le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
à true
.
Comment optimiser les applications
Voir OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION :
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
à false
.
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage, qui applique un recadrage de la caméra avant intérieure :
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Pour supprimer ce forçage, ce qui supprime le recadrage de la caméra avant intérieure :
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
Empêche les applications de désactiver le partage d'écran des applications (voir
Projection multimédia). Mise en œuvre lorsque les applications font un usage abusif
API createConfigForDefaultDisplay()
pour forcer
capturent tout l'écran et compromettent la vie privée des utilisateurs en exposant le contenu
des notifications, qui sont capturées en plein écran, mais pas dans l'écran de l'application
le partage, ainsi que toutes les applications, quel que soit le mode de fenêtrage.
Comment les applications peuvent obtenir le même résultat que le forçage
Autoriser le comportement de projection multimédia par défaut (implémenté dans Android 14, API
niveau 34 avec createScreenCaptureIntent()
),
qui permet aux utilisateurs de décider
de partager l'intégralité de l'écran ou une seule application
quel que soit le mode de fenêtrage. Ou appelez
createScreenCaptureIntent(MediaProjectionConfig)
avec un argument MediaProjectionConfig
renvoyé par une
à createConfigForUserChoice()
.
Comment optimiser les applications
Autoriser les utilisateurs à choisir de partager l'intégralité de l'écran de l'appareil ou une application pendant la projection multimédia, qui est le comportement par défaut à partir d'Android 14.
Faites en sorte que votre application puisse être redimensionnée (resizeableActivity="true"
) pour
prend en charge le mode multifenêtre.
Comment désactiver ou refuser le forçage
En raison de la gravité de la confidentialité des données des utilisateurs, votre application ne peut pas être désactivée ni désactivée. de ce forçage.
Indicateurs de propriété pour ajuster le forçage
Aucun.
Commandes adb pour tester le forçage
Pour appliquer le forçage, ce qui annule la désactivation du partage d'écran partiel pour l'application (cela permet d'activer le partage d'écran partiel):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Pour supprimer le forçage, ce qui permet à l'appli de désactiver une partie de l'écran partage:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Active l'envoi d'un focus factice pour les applications sans sélection en mode Écran partagé. Un peu les moteurs de jeu attendent d'obtenir le focus avant de dessiner le contenu de l'application ; et ainsi de suite : Le focus factice permet aux applications d'éviter d'afficher un écran noir lorsqu'elles sont réactivées et de ne pas tout en étant ciblée.
Comment les applications peuvent obtenir le même résultat que le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
jusqu'à
true
Comment optimiser les applications
Vous pouvez éviter ce problème si votre application gère plusieurs orientations et la configuration change bien. Pour que votre application soit adaptée aux grands écrans, suivez les Consignes relatives à la qualité des applis sur les grands écrans.
Si vous exécutez le moteur de jeu Unity, passez à la version 2019.4.40 ou ultérieure, puis
exporter à nouveau votre jeu. Conserver l'option Resizable Window
coché dans le lecteur Android
paramètres.
Comment désactiver ou refuser le forçage
Définir l'indicateur de propriété
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
jusqu'à
false
Indicateurs de propriété pour ajuster le forçage
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
Commandes adb pour tester le forçage
Pour appliquer le forçage :
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Pour supprimer le forçage :
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Remarque : les commandes appliquent ou suppriment le forçage de manière temporaire uniquement.
Ressources supplémentaires
- Consignes relatives à la Qualité des applis sur les grands écrans
- Critères fondamentaux de qualité des applis