繁体   English   中英

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

[英]Why Android Studio is removing and/or changing layout_margin* constraints?

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

我的 XML 每次都会随机更改:

  • 我切换到 Android Studio 的布局编辑器的Design选项卡
  • 或者当我打开Preview窗格时(在这种情况下,在我的更改过程中更频繁地发生更改)。

这些随机变化包括:

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

问题:

  • 还有其他人体验过这个 Android Studio 的功能吗?
  • 如何关闭这个“功能”,这样我的布局就不会被破坏?
  • 在哪里向 Google 或 JetBrains 报告此错误?

请看一下这个文件差异,它是在切换到设计选项卡时自动生成的: 在布局 XML 文件中自动进行更改的差异

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

更新 #1

正如所建议的那样,在制作layout_height="match_parent" ,我的修改频率降低了,但是当我在 Layout Designer'er 中编辑布局时,我的 XML 仍然混乱: 自动更改 #2 这次我想通过 Design UI 设置layout_marginTop (选择的行是我想要添加的),但我也得到了其他不需要的更改:

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

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

我使用的是 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM