gpt4 book ai didi

android - 如何使用 View 的中心作为 RelativeLayout 内的引用点

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:03:03 26 4
gpt4 key购买 nike

我一直在使用一些 hack 来拉伸(stretch)父级 RelativeLayout 中的 View ,以便它从左上角开始并在底部中心结束。虽然 RelativeLayout 确实可以让您将某物放置在其自身的中心,但它似乎并不能让您将某物拉伸(stretch)到同一点。

我的解决方案很简单,在那个中心放置一些东西,并给它 1 像素的尺寸,这样它就是父级 RelativeLayout 的实际中心。不要误会我的意思,这是有效的,我对此没有任何问题,但如果有更好的做法,我想知道。

至于我所说内容的图形表示,让我添加一些图片说明。

enter image description here

第一张图片有一个无文本的 TextView 位于 RelativeLayout 的中心,我给它设置了 0dp 的宽度。正如您在下一张图片中看到的那样,这允许我相对于该中心放置任何东西。我的观点是,如果不在中心添加额外的 View 就不能这样做,这让我感到很奇怪,因为我可以看到 Layout to left of 等属性布局在 的右侧,但没有 布局在 的中心。

enter image description here

所以场景可能更像是“它还没有坏,但我担心它随时都会爆裂”。另一方面,如果这是正确的做法并且我帮助某人学习新事物,那对我也适用。

为什么我提出的问题没有得到回答!?我在这里设置赏金..

目前最明智的建议(根据我的判断)是我将 LinearLayout 替换为 View,我认为这会占用更少的内存,即使它是略少。所以我感谢@yorkw。我很惊讶之前没有人问过这个问题。

只是澄清一下,因为似乎对我实际追求的东西存在误解。我不想让某些东西占据父宽度/高度的一半。我正在寻求一种将其用作引用点的方法(这就是我在标题中所说的),这样我就可以做一些事情,例如将图像放置在中心的左侧,而无需添加占据一半和重力的线性布局或其他。

更新

自 API 14 以来,我们有 Space available 这是一个轻量级的 View 子类,可能更适合这种 hack。

最佳答案

我喜欢你目前的解决方案,但如果你想避免时髦的隐形薄居中小部件,你可以按如下方式完成:

  • 将 containerWidth 计算为包含的 RelativeLayout 派生类(称为 MyRelativeLayout)的像素宽度
  • 创建一个名为 leftHalfWidgetLayoutParams 的 MyRelativeLayout.LayoutParams 实例
  • 设置 leftHalfWidgetLayoutParams.width = containerWidth/2,可以在上面创建时使用构造函数参数,也可以在创建之后使用。如果您想稍后对其进行调整(例如,在 MyRelativeLayout 中的 onSizeChanged() 的覆盖中),则这是必要的。
  • 每次设置或更改 leftHalfWidgetLayoutParams.width 时,调用 leftHalfWidget.setLayoutParams(leftHalfWidgetLayoutParams)。
  • 如果需要在每次宽度改变时重新绘制 MyRelativeLayout,请调用 requestLayout()

如果中心右侧的小部件过大,则可能还需要明确设置它们的布局宽度值,以阻止它们侵入容器的左半部分。

现在我意识到这失去了让 RelativeLayout 自动执行所有操作的一些“魔力”,而这正是您的方法实际上更好的地方。但是 RelativeLayout 仍然会尽可能地强制你的小部件的相对位置,考虑到将被添加到你的 leftHalfWidget 的布局参数中的附加宽度约束,所以你不会覆盖或放弃它的整体在这方面的贡献。

如果不以上述方式在布局参数上显式设置宽度值,我想不出一种方法来满足您在 RelativeLayout 中的要求。这是您的替代方法,但不一定是更好的方法。

我要指出的是,如果您的左半部分小部件总是将占据容器的左半部分,那么我不明白为什么水平top 级别的 LinearLayout(而不是 RelativeLayout)(左侧大小的小部件的权重为 0.5,而剩余的右半部分的右侧 RelativeLayout 的权重相同)不是一个好选择解决方案。在那种情况下,“相对”的东西无论如何只会在右半部分进行,那么当 LinearLayout 可以更简洁地完成这项工作时,为什么还要在顶层使用 RelativeLayout 呢?但也许您想在左侧使用 RelativeLayout 来处理垂直关系,因此您实际上可能在左侧有多个控件。

关于android - 如何使用 View 的中心作为 RelativeLayout 内的引用点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10751261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com