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

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

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

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

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

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

Вопросы:

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

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

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 добавляется. Я мог игнорировать это, но все же - не то, что я хотел бы случиться.

3 ответа

В моем случае удаление ограничения макета и его повторное добавление исправили исчезновение полей.

Я использую Android Studio 4.1.1.

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

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

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

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

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

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

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

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

Другие вопросы по тегам