我一直在使用一些黑客来扩展父RelativeLayout
内的视图,以便它从左上角开始并以底部中心结束。尽管RelativeLayout
确实可以让您将某些内容置于其中心位置,但它似乎并没有让您将某些内容延伸到同一点。
我的解决方案很简单,在该中心放置一些东西,并给它1px尺寸,使其成为父RelativeLayout
的实际中心。不要误解我的意思,这样做有用,而且我没有任何问题,但是如果有更好的做法,我想了解它。
至于我正在谈论的图形表示,让我添加一些图像说明。
第一张图片的文字TextView
位于RelativeLayout
的中心,我给它的宽度为0dp。这让我可以在下一张图片中看到相对于该中心放置任何东西。我的观点是,如果不需要在中心添加额外的视图就不能这样做,这让我觉得很奇怪,因为我可以看到Layout to left of
或Layout to right of
但等属性没有 Layout to center of
。
因此,情景可能会更多,“它没有被打破但,但我担心它会在任何时候弹出”。另一方面,如果这是正确的做法,我帮助某人学习新事物,那对我也有用。
为什么我会提出无法解答的问题!?我在这里设定赏金..
最明智的建议是(我的判断)是我用LinearLayout
取代View
,我认为这会占用更少的记忆,即使它稍微少一些。所以我感谢@yorkw。我很惊讶以前没有人问过这个问题。
只是为了澄清,因为似乎对我实际追求的内容存在误解。我不希望某些东西占据父宽度/高度的一半。我想要一种方法将它用作参考点(这就是我在标题中所说的)所以我可以做一些事情,将图像放在中心的左边,而不添加一半的线性布局和重力或者其他什么。
从API 14开始,我们有Space
可用,这是一个轻量级View
子类,可能更适合这种黑客攻击。
答案 0 :(得分:7)
我喜欢你现在的解决方案,但是如果你想避开那个时髦的隐形瘦中心小工具,你可以按如下方式完成:
如果中心右侧的小部件过大,可能还需要明确设置其布局宽度值,以防止它们侵入容器的左半部分。
现在我意识到这会让RelativeLayout自动完成所有操作而失去一些“魔力”,这就是你的方法实际上更好的地方。但是,如果增加了对leftHalfWidget布局参数的宽度限制,RelativeLayout仍然会强制执行小部件的相对位置,这样你就不会覆盖或放弃它的整体在这方面的贡献。
我没有想到在RelativeLayout中满足您的要求的方法,而没有以上述方式显式设置布局参数的宽度值。这是你的另一种选择,但不一定是更好的方法。
我会指出如果你的左半部件总是将占用容器的左半部分,那么我看不出为什么是水平的 top 级别的LinearLayout(而不是RelativeLayout)(左侧小部件的权重为0.5,其余右半部分的权重等于RelativeLayout),不会很好解。在这种情况下,“相对”的东西只会在右半边进行,所以为什么在LinearLayout可以更简洁地完成工作时,在顶层使用RelativeLayout?但也许您想在左侧使用RelativeLayout来处理垂直关系,因此您实际上可能在左侧有多个控件。
答案 1 :(得分:1)
为了实现您的目标,我使用LinearLayout,layout_width = 0dip和layout_weight = 50。 但它并不是最佳的,因为它在线性布局中嵌入了另一种布局。我很想知道是否还有其他更好的解决方案。
答案 2 :(得分:1)
我认为最好使用LinearLayout。使用属性'layout_weight',我认为LinearLayout可以解决很多问题。使用LinearLayout还需要LinearLayout中的另一个空视图,但我认为它更好,我喜欢LinearLayout :) 这是我的代码
<LinearLayout android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="@drawable/your_image">
<Button android:layout_height="fill_parent"
android:layout_width="0dip"
android:layout_weight="1.0"/>
<View android:layout_height="fill_parent"
android:layout_width="0dip"
android:layout_weight="1.0"
android:visibility="invisible"/>
</LinearLayout>
最后,抱歉我的英语不好。
答案 3 :(得分:1)
这似乎有些不稳定。我不想成为那个在布局上进行后续工作的人。实际上,要解决这个问题,你应该使用LinearLayout和权重。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff0000"
android:weightSum="2" >
<Button
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#00ff00"
android:text="@string/hello" />
</LinearLayout>
您可以将上述内容嵌入到RelativeLayout中。鉴于RelativeLayout的每个直接子节点都有一个dev-defined角色,很容易看到两个方向上fill_parent的LinearLayout子节点是RelativeLayout的另一层。
您可以插入具有给定layout_weight的另一条评论中所述的任意空白视图,或者,如上所述,指定weightSum,以便隐含其余部分。我在上面添加了一些颜色,这里是一张漂亮的照片
答案 4 :(得分:1)
目前,Android中没有内置任何内容可帮助使用布局中心作为参考点。但是,您可以使用上面在其他答案中建议的一些扩展和黑客来完成此操作。如果Android已经有了这方面的东西,那么它将进行相同数量的计算并且与其中一些答案一样工作。所以它是同一个,但如果我们内置它,肯定会看起来更干净。
答案 5 :(得分:1)
您可以使用支持库的PercentRelativeLayout。
将其包含在您的项目中:PercentRelativeLayout
使用RelativeLayout
代替app:layout_widthPercent="50%"
将按钮的宽度设为其父级的50%:{{1}}
新布局似乎快速而简单易用。我认为它唯一真正的缺点是它不能用于主屏幕小部件。