为什么我的相对布局占据全屏宽度

时间:2011-10-08 15:38:48

标签: android relativelayout

为什么我的相对布局占据全屏宽度

<?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”,输出也是一样的。 Enlighten

请赐教!

编辑:我想我之前对我的问题不是很清楚。为此道歉。 当我在一个相对布局中有2个子视图,其中一个与父对齐,而另一个是右对齐,相对布局宽度是WRAP_CONTENT,那么我预计布局宽度只是2个按钮宽度的总和(不是这就是WRAP_CONTENT的含义??)。我知道有其他方法可以实现我正在寻找的UI,但我只是想正确地理解这些相对布局标签。

编辑2:我已经进行了一些实验,看起来如果我们使用Layout_AlighParentRight,其父级宽度为WRAP_CONTENT,则上部布局宽度用于计算(如下面指出的几个答案)。但是我们只使用Layout_alignParentLeft然后它按预期工作,并且布局宽度没有扩展到整个屏幕。谢谢你的帮助!

4 个答案:

答案 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的重力来将孩子定位在正确的位置。

  • RelativeLayout的
    • 的LinearLayout
      • 儿童1(wrap_content)
    • LinearLayout(重力:右上角)
      • Child 2(wrap_content)