在 Android 中使用负边距是一种不好的做法吗?

新手上路,请多包涵

负边距演示:

在此处输入图像描述

场景

通过为其中一个视图设置负边距来重叠视图,以便它侵入另一个视图的边界框。

想法

如果应该重叠布局,它似乎可以按照您期望的方式工作。但我不想因为在不知不觉中做错事而遇到更大的问题。仿真器,物理设备,你的名字,当你使用负边距时,一切似乎都正常工作,一个视图侵入另一个视图边界框,并且取决于它在布局中的声明方式,它将位于另一个视图的上方或下方。

我也知道,从 API 21 开始,我们可以设置 translationZelevation 属性以使视图出现在其他视图之上或之下,但 我的担忧 主要来自 于在文档中 对于 layout_margin 属性,它明确指定 边距值应该为正,让我引用:

摘抄:

指定此视图左侧、顶部、右侧和底部的额外空间。这个空间在这个视图的范围之外。 边距值应该是正数。必须是维度值,是一个浮点数加上一个单位,如“14.5sp”。可用单位有:px(像素)、dp(与密度无关的像素)、sp(基于首选字体大小的缩放像素)、in(英寸)、mm(毫米)…

自从最初提出这个问题以来的几年里,我没有遇到任何负边距问题,确实尽量避免使用它们,但 没有 遇到任何问题,所以即使文档说明,我也不是担心它。

原文由 Juan Cortés 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 596
2 个回答

2010 年,@RomainGuy(核心 Android 工程师)表示 负边距具有未指明的行为

2011 年,@RomainGuy 表示 您可以在 LinearLayoutRelativeLayout 上使用负边距

2016 年,@RomainGuy 表示 他们从未得到官方支持,也不会被 ConstraintLayout 支持

2020 年 12 月(v2.1.0,2021 年 6 月正式发布), ConstraintLayout 增加了对约束 的负边距支持。

不过,解决这个限制很容易。

在基本视图的底部添加一个辅助视图(高度 0dp,宽度限制为父视图),在底部添加所需的边距。

然后将您的视图置于此视图下方,有效地使其具有“负”边距,但不必使用任何不受支持的负值。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 4.0 许可协议

代替负边距,您可以使用: translationXtranslationY

例子:

 android:layout_marginBottom = -2dp

android:translationY = -2dp

更新:请记住,整个视图都已翻译。

原文由 I.Step 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题