为什么Android Studio正在删除和/或更改layout_margin *约束?

时间:2017-01-31 09:56:21

标签: android android-studio android-constraintlayout android-layout-editor

我正在使用android.support.constraint.ConstraintLayout来布局简单卡片的内容视图。

我每次在以下情况下都会随机更改XML:

  • 我切换到Android Studio的布局编辑器的Design标签
  • 或者当我打开Preview窗格时(在这种情况下,在我的更改期间更改会发生更改)。

这些随机变化包括:

  • 删除我手动定义的布局边距(例如layout_marginEnd
  • 更改我手动输入的保证金值
  • 添加tools:layout_editor_absoluteX

问题:

  • 其他人是否有过这个Android Studio的功能?
  • 如何关闭此“功能”,这样我的布局就不会被破坏?
  • 向Google或JetBrains报告此错误的位置?

请查看此文件diff,它是在切换到“设计”选项卡时自动生成的: Automatically made changes' diff in layout XML file

PS。:我的Android Studio版本为2.2.3;我在macOS Sierra上运行它。

更新#1

正如所建议的,在制作layout_height="match_parent"之后,我不经常修改,但是当我在Layout Design'er中编辑布局时,我的XML仍然搞砸了: Automatic changes #2 这次我想通过设计UI设置layout_marginTop(选择的行是我想要添加的),但我还得到了其他不需要的更改:

  • layout_marginStart已删除;
  • app:layout_constraintBottom_toBottomOf引用的ID前缀为“+”符号,这意味着,这些ID是新声明的,所以当我使用Goto declaration功能时,我必须从中选择它列表 - 不是理想的行为。
  • tools:layout_editor_absoluteX已添加。我可以忽略它,但仍然 - 不是我想要发生的事情。

4 个答案:

答案 0 :(得分:1)

我注意到Android Studio 2.3存在同样的问题,每次从使用ConstraintLayout的最近项目的文本视图到设计视图时,代码都会自动更改。 - 我很确定它会发生在RelativeLayout或你想要使用的其他布局上。

我想这是与设计视图相关的某种类型的自动代码生成错误,我还没有找到办法将其关闭。

我不确定这会有什么帮助,因为我确信你已经意识到这一点,但如果你几乎完全在文本视图中工作,问题就永远不会发生。

我偶尔会使用设计视图来开始我的布局,但是一旦我有了一些工作,在开发过程中保持文本视图个人似乎更快。

答案 1 :(得分:0)

正如@JoeyJubb所提到的,使用layout_height="match_parent"解决了这个问题。至少XML不会被修改。虽然,有时候预览生成不正确。

答案 2 :(得分:0)

在我的案例中升级到最新的gradle dependecy帮助:

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

此外,我开始使用0dp而不是match_parentlayout_width

答案 3 :(得分:0)

在我的情况下,删除布局约束并再次添加它可以修复消失的边距。

我在使用Android Studio 4.1.1。