为什么我的相对布局占据全屏宽度
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#f00"
>
<Button
android:id="@+id/Button01"
android:text="Press Here"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button
android:id="@+id/Button02"
android:text="02"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</RelativeLayout>
我已将相对布局指定为“wrap_content”,那么为什么它会占据整个屏幕空间。即使我说android:layout_width =“fill_parent”,输出也是一样的。
请赐教!
编辑:我想我之前对我的问题不是很清楚。为此道歉。 当我在一个相对布局中有2个子视图,其中一个与父对齐,而另一个是右对齐,相对布局宽度是WRAP_CONTENT,那么我预计布局宽度只是2个按钮宽度的总和(不是这就是WRAP_CONTENT的含义??)。我知道有其他方法可以实现我正在寻找的UI,但我只是想正确地理解这些相对布局标签。编辑2:我已经进行了一些实验,看起来如果我们使用Layout_AlighParentRight,其父级宽度为WRAP_CONTENT,则上部布局宽度用于计算(如下面指出的几个答案)。但是我们只使用Layout_alignParentLeft然后它按预期工作,并且布局宽度没有扩展到整个屏幕。谢谢你的帮助!
答案 0 :(得分:13)
其他答案正确地指出,当您的相对布局宽度设置为wrap_content
,并且其子项左右对齐时,相对布局采用其父级的宽度 - 在这种情况下,整个屏幕。但是,如果两个孩子都在一侧对齐,那么相对布局将与最宽的孩子一样宽。
现在,如果您希望将两个按钮彼此相邻放置,并且相对布局与按钮宽度的总和一样宽,则需要稍微不同的方法。不是将两个按钮相对于父按钮定位,而是仅使用一个按钮(例如,第一个按钮)。假设它的定位保持不变(android:layout_alignParentRight="true"
)。现在按钮浮动到右侧,因此第二个按钮,为了位于它旁边,必须与第一个按钮的左侧对齐。因此,我们只需添加android:layout_toLeftOf="@id/Button01"
(并删除android:layout_alignParentLeft="true"
部分)。
有关详情,建议您查看relative layouts上非常友好的教程。
答案 1 :(得分:3)
因为你有
android:layout_alignParentLeft="true"
对象的宽度和
android:layout_alignParentRight="true"
宽度另一个对象,然后布局扩展到两侧,为您提供全宽度布局。
但是当你使用Layout_alignParentXXXXX,并且你输入了父WRAP_CONTENT时,这会让孩子们去定义宽度的上部布局。
答案 2 :(得分:1)
此行使“按此处”按钮(Button01
)对齐到右侧:
android:layout_alignParentRight="true"
这使您的布局在宽度上填充父级。
答案 3 :(得分:0)
您可能面临的另一个问题是,如果您将2个孩子设置为“对齐父权”+“wrap_content”,并将您的相对布局设置为“wrap_content”,并且相对布局包含在全屏LinearLayout中您的相对布局将占用整个LinearLayout宽度。
如果您同时使用“左对齐父”,则相对布局会粘在左侧,其宽度实际上是“换行内容”。但是“对齐父权”的行为是不同的,这有点奇怪。
解决方法:强>
为了解决这个问题(我必须将其中一个孩子对齐到右边),我实际上将2个孩子设置为“对齐父母左边”,然后玩儿童填充以使其中一个孩子位于顶部右上角。这是一个肮脏的解决方法,但我现在唯一找到的。
可能更清洁的解决方案:
另一个技巧是将2个LinearLayout放在FrameLayout中,然后将你的真实孩子放在每个LinearLayout中,并使用那些LinearLayout的重力来将孩子定位在正确的位置。