如何使用View的中心作为RelativeLayout中的参考点

Jua*_*tés 11 android android-layout android-relativelayout

我一直在使用一些黑客来拉伸父母内部的视图,RelativeLayout以便它从左上角开始并以底部中心结束.虽然RelativeLayout确实让你把东西放在它自身的中心,但它似乎并没有让你在同一点上伸展某些东西.

我的解决方案很简单,在该中心放置一些东西,并给它1px尺寸,使其成为父亲的实际中心RelativeLayout.不要误解我的意思,这个问题很有效,而且我对它没有任何问题,但是如果有更好的做法,我想知道它.

至于我正在谈论的图形表示,让我添加一些图像说明.

                                                在此输入图像描述

第一张图像TextView的中心位置没有文字RelativeLayout,我给它的宽度为0dp.这让我可以在下一张图片中看到相对于该中心放置任何东西.我的观点是,它令我奇怪的是,你不能这样做,而不需要增加额外的视图在该中心,因为我可以看到性能如Layout to left ofLayout to right of没有 Layout to center of.

                                                 在此输入图像描述

因此,情景可能会更多," 它还没有被打破,但我担心它会随时爆发 ".另一方面,如果这是正确的做法,我帮助某人学习新事物,那对我也有用.

为什么我会提出无法解答的问题!?我在这里设定赏金..

(我的判断)最明智的建议是,我LinearLayout用一个View我认为会减少记忆的东西来代替我,即使它稍微少一些.所以我感谢@yorkw.我很惊讶以前没有人问过这件事.

只是为了澄清,因为似乎有一个误解,我实际上是在追求什么.我不希望某些东西占据父宽度/高度的一半.我想要一种方法将它用作参考点(这就是我在标题中所说的)所以我可以做一些事情,将图像放在中心的左边,而不添加一半的线性布局和重力管他呢.

更新

从API 14开始,我们可以Space使用轻量级View子类,它可能更适合这种黑客攻击.

Car*_*arl 7

我喜欢你现在的解决方案,但如果你想避免使用时髦的隐形瘦中心小部件,你可以按如下方式完成:

  • 计算containerWidth作为包含RelativeLayout派生类的像素宽度(调用此MyRelativeLayout)
  • 创建一个名为leftHalfWidgetLayoutParams的MyRelativeLayout.LayoutParams实例
  • 设置leftHalfWidgetLayoutParams.width = containerWidth/2,在上面创建时使用构造函数参数,或者在事实之后使用.如果您想稍后调整它(例如,在MyRelativeLayout中覆盖onSizeChanged()),则需要事实.
  • 每次设置或更改leftHalfWidgetLayoutParams.width时,都会调用leftHalfWidget.setLayoutParams(leftHalfWidgetLayoutParams).
  • 如果需要在每次宽度更改时重绘MyRelativeLayout,请调用requestLayout()

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

现在我意识到这会让RelativeLayout自动完成所有事情而失去一些"魔力",这就是你的方法实际上更好的地方.但是,如果增加了对leftHalfWidget布局参数的宽度限制,RelativeLayout仍然会强制执行小部件的相对位置,这样你就不会覆盖或放弃它的整体在这方面的贡献.

我没有想到在RelativeLayout中满足您的要求的方法,而没有以上述方式显式设置布局参数的宽度值.这是你的另一种选择,但不一定是更好的方法.

我想指出,如果你的左半部分小部件总是占据容器的左半部分,那么我无法看到为什么顶层的水平LinearLayout(而不是RelativeLayout)(权重为0.5)对于你的左侧小部件,其余右半部分具有相同权重的右侧RelativeLayout),这不是一个好的解决方案.在这种情况下,"相对"的东西只会在右半边进行,所以为什么在LinearLayout可以更简洁地完成工作时,在顶层使用RelativeLayout?但也许您想在左侧使用RelativeLayout来处理垂直关系,因此您实际上可能在左侧有多个控件.