Почему 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: На этот раз я хотел установить 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