web-dev-qa-db-fra.com

Où les méta Android.max_aspect font-elles la différence?

Un récent blog explique que nous devons utiliser 

<meta-data Android:name="Android.max_aspect" Android:value="2.1" />

dans <application> élément de AndroidManifest.xml pour un affichage optimal sur des appareils à écran très large, par exemple. Samsung Galaxy S8.

Pour tester cela, j'ai installé mon application (no max_aspect, aucun indicateur resizeableActivity; targetSdkVersion=22, compileSdkVersion=24) sur un Android 7.1.1. émulateur avec résolution personnalisée 2960x1440. Toutes les activités, y compris immersives, remplissent l'écran sans marges, comme indiqué dans l'article du blog.

J'ai ajouté explicite

<meta-data Android:name="Android.max_aspect" Android:value="1.5" />

et cela n'a également aucun effet sur l'émulateur.

Alors, la question: est-ce que cet indicateur de méta est vérifié uniquement sur les vrais périphériques, ou y a-t-il une configuration que j'ai manquée pour mon émulateur?

Mise à jour: J'ai tenté de joindre Neto Marin, l'auteur du billet cité. J'ai trouvé un fier Tweet ] à propos de sa contribution à la communauté Android Dev mondiale, mais n'a pas pu obtenir de réponse de sa part.

22
Alex Cohn

Letterboxing se produit sur différents appareils, tels que Samsung S8, LG G6 , Pixel 2 XL , et quelques autres. Il semble faire partie d'Android 8 et surtout 8.1.

La définition officielle de la compatibilité Android 8.1 comprend le paragraphe suivant:

[C-0-1] Implémentations de périphérique avec le Configuration.uiMode défini sur UI_MODE_TYPE_NORMAL DOIT avoir une valeur de format d'image comprise entre 1,3333 (4: 3) et 1,86 (environ 16: 9), à moins que l'application ne puisse être considérée comme prête à être étirée plus longtemps de remplissant l'une des conditions suivantes:

  • L'application a déclaré qu'elle prend en charge un rapport de format d'écran plus grand via le Android.max_aspect valeur de métadonnées.
  • L'application déclare qu'il est redimensionnable via l'attribut Android: resizeableActivity .
  • L'application cible les API de niveau 26 ou supérieur et ne déclare pas un Android: MaxAspectRatio qui limiterait le rapport hauteur/largeur autorisé.

Notez que les deux premiers attributs sont au niveau de l'application, tandis que le dernier attribut appartient à Activity.

Certains fournisseurs permettent à l'utilisateur final de contrôler cela davantage. LG a le menu "App Scaling" ; Samsung vous permet de choisir "Applications plein écran" dans les "Paramètres d'affichage".

1
Alex Cohn

Android.max_aspect ne fait de différence que si votre Android: resizeableActivity n'est pas vrai . Si l'API cible de votre application est de 24 ou plus Android: resizeableActivity est définie sur true.

Remarque: Il n'est pas nécessaire de définir un rapport hauteur/largeur maximum si l'attribut Android: resizeableActivity d'une activité est défini sur true. Si votre application cible une API de niveau 24 ou supérieur, cet attribut est défini par défaut sur true. Pour plus d'informations, voir Configuration de votre application pour le mode multi-fenêtre. 

Veuillez vous référer à la documentation .

6
yaroslav

Vous devez définir les proportions de l'émulateur selon vos besoins.

Essayez ces étapes:

In Android Studio, open AVD Manager
Create Virtual Device
    New Hardware Profile
    Set name: "18:9 aspect ratio screen"
    Set resolution: 1080 x 2160
    Finish
Select "18:9 aspect ratio screen"
Next
Select system image Nougat (API Level 25)
Next
AVD Name: "API Level 25 Nougat 18x9 aspect ratio screen"
Finish

Puis lancez sur cet émulateur.

Si vous ne définissez pas de valeur et que Android:resizeableActivity n'est pas vrai, le rapport de format maximal par défaut est de 1,86 (environ 16: 9) et votre application ne tirera pas parti de l'espace d'écran supplémentaire.

Il n'est pas nécessaire de définir un rapport hauteur/largeur maximum si l'attribut Android:resizeableActivity d'une activité est défini sur true. Si votre application cible une API de niveau 24 ou supérieur, cet attribut est défini par défaut sur true.

2
Avijit Karmakar