【问题标题】:Margins not takign effect if value greater than container boundary如果值大于容器边界,边距不生效
【发布时间】:2026-02-08 08:25:01
【问题描述】:

如果我们将底部边距设置为大于容器高度的值,则边距没有任何作用。我希望视图在下/上边距> 高度或右/左边距> 宽度时消失。我正在尝试实现锚定效果,如果边距在容器宽度/高度内,一切正常。让我知道是否有人对此有任何想法。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    我希望视图在底部/顶部边距 > 高度或左右/左边距 > 宽度时消失。

    不要这样设置边距。如果您希望“视图消失”,请使用setVisibility()

    View、边距和所有内容都不能大于其容器。

    【讨论】:

    • 我无法控制边距是多少。视图是动态创建的。如果视图锚定在底部,纵向模式下的机器人边距为 400,横向模式下我想要底部边距仍为 400 并导致视图被挤压。容器大小也可以动态改变,因此可以在不改变方向的情况下看到锚定效果。我无法控制容器的大小、锚标志、视图大小或视图的边距。就像我说的那样,我得到了我想要的结果,除非容器小于边距
    • @Veeresh:YOU 是设置边距的人。它们不是自发地被一根魔杖设置的。 YOU 是改变容器大小的人。大小不会被神秘力量改变。所有这些都是通过 Java 代码在某处发生的。因此,YOU 完全有能力根据这些值确定您希望何时不显示视图,并且 YOU 完全有能力根据需要调用setVisibility() 来实现您寻求的可见性结果。
    • 让我换个说法。我试图确保机器人边距不大于容器,我尝试的一种方法是覆盖视图组的 measureChildWithMargins() 方法,这没有生效。重绘容器时,我在哪里截取和更改子布局参数以使边距不超过容器的最终宽度和高度?
    • @Veeresh:啊。好问题。我还没有从头开始创建ViewGroup,所以我无法回答这个问题。我建议您打开一个新的 * 问题,专门询问这个问题。我很抱歉。