首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中使用负边距是不是一种糟糕的做法?

在Android中使用负边距是不是一种糟糕的做法?
EN

Stack Overflow用户
提问于 2012-05-20 20:43:52
回答 7查看 83.7K关注 0票数 129

负边距Demo:

场景

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

思考

它的工作方式似乎与您预期的重叠布局,如果他们应该。但我不想遇到一个更大的问题,因为在不知不觉中做错了事情。模拟器,物理设备,你可以命名它,当你使用负边距时,一切似乎都正常工作,一个视图侵入另一个视图的边界框,并根据它在布局中的声明,它将位于另一个视图的上方或下方。

我还知道,自API21以来,我们可以设置translationZelevation属性来使视图显示在其他视图的上方或下方,但我关注的基本上来自这样一个事实:in the documentation layout_margin属性明确指定边距值应为正,让我引用一下:

摘录:

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

在最初提出这个问题后的几年里,我没有遇到过任何负边距问题,我确实尽量避免使用它们,但没有遇到任何问题吗,所以即使文档中说明了这一点,我也并不太担心。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-05-20 20:53:20

2010年,@RomainGuy (安卓核心工程师)表示,negative margins had unspecified behavior

在2011年,@RomainGuy声明you can use negative margins on LinearLayout and RelativeLayout

2016年,@RomainGuy表示,they have never been officially supported and won't be supported by ConstraintLayout

不过,绕过这一限制很容易。

在基础视图的底部添加辅助视图(高度为0dp,宽度约束为父视图),在底部添加所需的边距。

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

票数 206
EN

Stack Overflow用户

发布于 2018-07-07 10:21:01

希望这能帮助到一些人。以下是基于@CommonsWare的答案使用ConstraintLayout的工作示例代码:

在基础视图的底部添加一个辅助视图(高度为0dp,宽度约束为父视图),在底部添加所需的页边距。然后将您的视图放置在此视图的下方,有效地允许它具有“负”页边距,但不必使用任何不受支持的负值。

示例代码:

代码语言:javascript
复制
<TextView
    android:id="@+id/below"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#F1B36D"
    android:padding="30dp"
    android:text="I'm below"
    android:textColor="#ffffff"
    android:textSize="48sp"
    android:textAlignment="center"
    tools:layout_editor_absoluteX="129dp"
    tools:layout_editor_absoluteY="0dp" />

<android.support.v4.widget.Space
    android:id="@+id/space"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginBottom="32dp"
    app:layout_constraintBottom_toBottomOf="@+id/below"
    app:layout_constraintLeft_toLeftOf="@id/below"
    app:layout_constraintRight_toRightOf="@id/below" />

<TextView
    android:id="@+id/top"
    android:layout_width="100dp"
    android:layout_height="60dp"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:text="I'M ON TOP!"
    android:background="#676563"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/space" />

输出:

票数 24
EN

Stack Overflow用户

发布于 2013-10-17 23:26:23

如果您想使用负边距,请将容器及其clipToPadding的足够填充设置为false,并为它的子视图设置负边距,这样它就不会裁剪子视图!

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10673503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档