在Android中使用负边距是不好的做法吗?
负保证金演示:
场景
通过为其中一个设置负边距来重叠视图,以便它侵入另一个视图的边界框。
思考
它似乎以你期望的方式工作,如果他们应该重叠的布局。 但我不想在不知不觉中做一件更大的事情。 仿真器,物理设备,你命名它,当你使用负边界一切似乎工作正常,一个视图侵入另一个视图的边界框,并根据它如何在布局中声明它将在另一个视图之上或之下。
我也知道,因为API 21我们可以设置translationZ
和elevation
属性,使视图出现在其他视图的上方或下方,但我的关注基本上来自这样一个事实,即在 layout_margin
属性的文档中清楚地指定了margin值应该是积极的 ,让我引用:
摘抄:
在该视图的左侧,顶部,右侧和底部指定额外的空间。 这个空间在这个视图的范围之外。 保证金值应该是正值 。 必须是一个维度值,这是一个浮点数字,附加一个单位如“14.5sp”。 可用的单位是:px(像素),dp(密度独立像素),sp(基于首选字体大小的缩放像素),单位为英寸,毫米(毫米)…
自从问起这个问题以来,我一直没有任何负利润的问题,尽量避免使用它们,但是没有遇到任何问题,所以即使文件说明,我也不是担心它。
在2010年,@RomainGuy(核心Android工程师)表示, 负利润率没有明确的行为 。
2011年,@RomainGuy表示可以在LinearLayout
和RelativeLayout
上使用负边距 。
恕我直言,最后一个胜利,所以我会去与后者Romain-ly的build议。 🙂
如果你想使用负边距,为容器设置足够的填充,并将其clipToPadding设置为false,并为其子项设置负边距,这样就不会剪裁子视图!
过去可能是不好的做法,但有了Material Design和浮动动作button,现在在许多情况下似乎是不可避免的。 基本上,当你有两个单独的布局,你不能把它放在一个RelativeLayout中,因为它们需要明确的单独的处理(比如想想标题和内容),重叠FAB的唯一方法就是使它不能与一个使用负边距的布局。 这会造成可点击区域的其他问题。
对我来说,关于在TextView上设置负边距(我意识到OP是指一个ViewGroup,但我正在寻找设置负边距的问题,我在这里着陆)…我发现4.0.3( API 15),并将android:layout_marginTop
或android:layout_marginBottom
设置为负值,例如-2dp。
出于某种原因,TextView根本不显示。 从视图来看,它似乎“消失”了(不仅仅是不可见的)。
当我尝试与其他3个版本的layout_margin,我没有看到这个问题。
请注意,我没有试过这个真正的设备,这是使用4.0.3模拟器。 这是我发现的第二个奇怪的事情,只有受影响的4.0.3,所以我的新规则是总是testing一个4.0.3模拟器:)
我已经成功地通过使用android:lineSpacingExtra="-2dp"
来减lessTextView的底部边距,即使我碰巧有android:singleLine="true"
(所以我不会认为行间距是一个因素)。
我只知道在相当短的时间内是可能的。 但是我觉得没有问题。 只要知道屏幕尺寸等,你肯定不会意外地做出不应该出现在屏幕上重叠的项目。 (即在文本之上的文本可能是一个坏主意。)