web-dev-qa-db-fra.com

Pourquoi Android Studio supprime et/ou modifie-t-il les contraintes layout_margin *?

J'utilise Android.support.constraint.ConstraintLayout pour mettre en page les vues de contenu d'une simple carte.

Je reçois des modifications aléatoires dans mon XML, à chaque fois, quand:

  • Je passe à l'onglet Design de l'éditeur de disposition d'Android Studio.
  • Ou lorsque j'ai activé un volet Preview (dans ce cas, les modifications sont encore plus fréquentes au cours de mes modifications).

Ces changements aléatoires incluent:

  • Suppression de mes marges de mise en page définies manuellement (par exemple, layout_marginEnd)
  • Changer les valeurs de ma valeur de marge saisie manuellement
  • Ajout de valeurs tools:layout_editor_absoluteX

Des questions:

  • Quelqu'un d'autre expérimente la fonctionnalité de cet Android Studio?
  • Comment désactiver cette "fonctionnalité" afin que mes mises en page ne soient pas détruites?
  • Où signaler ce bogue à Google ou à JetBrains?

S'il vous plaît jeter un oeil à ce fichier diff, qui a été faite automatiquement lorsque vous passez à l'onglet Conception:  Automatically made changes' diff in layout XML file

PS: Ma version d'Android Studio est 2.2.3; Je l'exécute sur macOS Sierra.

Mise à jour # 1

Comme suggéré, après avoir créé layout_height="match_parent", j'obtiens moins de modifications, mais mon XML est quand même perturbé lorsque je modifie la présentation dans Layout Design'er:  Automatic changes #2 Cette fois, je voulais définir layout_marginTop par le biais de l'interface utilisateur de conception (la ligne sélectionnée correspond à ce que je voulais ajouter), mais j'ai également ces autres modifications indésirables:

  • layout_marginStart enlevé;
  • Les identifiants app:layout_constraintBottom_toBottomOf référencés ont un préfixe "+", ce qui signifie que ces identifiants sont nouvellement déclarés. Ainsi, lorsque j'utiliserai la fonctionnalité Goto declaration, je devrai la choisir dans la liste - ce n'est pas le comportement souhaité.
  • tools:layout_editor_absoluteX est ajouté. Je pouvais l'ignorer, mais quand même - ce n'est pas ce que je voudrais arriver.
15
ViliusK

Je remarquais le même problème avec Android Studio 2.3: le code changeait automatiquement chaque fois que je passais de la vue texte à la vue création sur un projet récent avec ConstraintLayout. - Je suis à peu près sûr que cela se produit avec RelativeLayout ou tout autre agencement que vous souhaitez utiliser. 

J'imagine qu'il s'agit d'un type de bogue de génération de code automatique lié à la vue Conception. Je n'ai pas encore trouvé le moyen de le désactiver. 

Je ne suis pas sûr que cela aide, car je suis convaincu que vous l'avez déjà compris, mais si vous travaillez presque complètement en mode texte, le problème ne se reproduira jamais. 

J'utilise parfois le mode Création pour commencer ma mise en page, mais dès que quelque chose fonctionne, rester personnellement en mode texte semble être plus rapide pour le processus de développement. 

1
ViaTech

Comme @JoeyJubb l'a mentionné, l'utilisation de layout_height="match_parent" résout ce problème. Au moins, XML n'est pas modifié. Bien que, parfois, l'aperçu ne soit pas généré correctement.

0
ViliusK

Dans mon cas, la mise à niveau vers la dernière dépendance de Gradle a aidé:

com.Android.support.constraint:constraint-layout:1.0.2

J'ai aussi commencé à utiliser 0dp au lieu de match_parent pour layout_width

0
dees91