Почему Android Studio удаляет и/или меняет ограничения layout_margin *?

Я использую android.support.constraint.ConstraintLayout для компоновки простых представлений содержимого карты.

Я получаю случайные изменения в моем XML, каждый раз, когда:

  • Я перехожу к редактору макетов Android Studio Design
  • Или когда у меня включена панель Preview (в этом случае изменения происходят еще чаще во время моих изменений).

Эти случайные изменения включают:

  • Удаление моих вручную заданных полей макета (например, layout_marginEnd)
  • Изменение значений моего введенного вручную значения поля
  • Добавление значений tools:layout_editor_absoluteX

Вопросы:

  • Кто-нибудь еще испытывает эту функцию Android Studio?
  • Как отключить эту функцию, поэтому мои макеты не будут уничтожены?
  • Где сообщить об этой ошибке Google или JetBrains?

Обратите внимание на этот файл diff, который был сделан автоматически при переключении на вкладку "Дизайн": Автоматически внесенные изменения

PS: Моя версия Android Studio 2.2.3; Я запускаю его на macOS Sierra.

Обновление # 1

Как было предложено, после создания layout_height="match_parent", я получаю изменения реже, но все же мой XML становится испорченным, когда я редактирую макет в Layout Design'er: Автоматические изменения # 2 На этот раз я хотел установить layout_marginTop через интерфейс проектирования (выбранная строка - это то, что я хотел добавить), но я также получил эти другие нежелательные изменения:

  • layout_marginStart удален;
  • app:layout_constraintBottom_toBottomOf ссылочные идентификаторы получили префикс знака "+", что означает, что эти идентификаторы объявлены вновь, поэтому, когда я буду использовать функциональность Goto declaration, мне нужно будет выбрать его из списка - не желаемое поведение.
  • tools:layout_editor_absoluteX добавляется. Я мог бы игнорировать это, но все же - не то, что я хотел бы сделать.

Ответы

Ответ 1

Я замечал ту же проблему с Android Studio 2.3, этот код менялся автоматически каждый раз, когда я переходил из текстового представления, чтобы проектировать представление в недавнем проекте с помощью ConstraintLayout. - Я уверен, что это происходит с RelativeLayout или любым другим макетом, который вы хотите использовать.

Я предполагаю, что это какой-то тип ошибки генерации автоматического кода, связанный с дизайном, я еще не смог найти способ отключить его.

Я не уверен, что это помогает, потому что я уверен, что вы это уже поняли, но если вы почти полностью работаете в текстовом представлении, проблема никогда не произойдет.

Я иногда использую дизайн, чтобы начать мой макет, но как только у меня что-то работает, оставаясь в текстовом представлении лично, кажется, быстрее для процесса разработки.

Ответ 2

Как упоминалось в @JoeyJubb, использование layout_height="match_parent" решает эту проблему. По крайней мере XML не изменяется. Хотя, иногда предварительный просмотр генерируется некорректно.

Ответ 3

В моем случае обновление до новейшего gradle dependecy помогло:

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

Также я начал использовать 0dp вместо match_parent для layout_width