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