RelativeLayout wrap_content不尊重非锚视图

时间:2014-03-31 16:57:32

标签: android android-layout android-xml

我有一个相对布局,看起来像下面的

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/profile_pic"
        android:layout_width="@dimen/small_size"
        android:layout_height="@dimen/small_size"
        android:layout_alignParentLeft="true"
        android:src="@drawable/some_image" />

    <ImageView
        android:id="@+id/extra_pic"
        android:layout_width="@dimen/large_size"
        android:layout_height="@dimen/large_size"
        android:layout_alignBottom="@id/profile_pic"
        andorid:layout_toRightOf="@id/profile_pic" />

</RelativeLayout>

我需要将其保留为相对布局,因为原始布局文件看起来比这更复杂。

viewGroup的高度仅包裹profile_pic高度,并且由于extra_pic高度较大,因此会被切断。如何将relativeLayout设置为wrap_content,以便将最大项包装在布局中?

我希望它看起来像:

enter image description here

目前的情况

enter image description here

1 个答案:

答案 0 :(得分:1)

看起来这是RelativeLayout的限制。每当您使用wrap_content来定义RelativeLayout的大小时,肯定会有怪癖。如果您深入研究source code,则容器的高度似乎取决于任何子视图的bottom的最大值。由于较大的视图与较小视图的底部对齐,较大的视图bottom与较小的视图的bottom相同,因此容器的高度不会延长。

如果没有看到完整的布局,我无法给你一个确切的解决方案,但你可能会尝试这样的事情:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <View
        android:id="@+id/spacer"
        android:layout_width="@dimen/large_size"
        android:layout_height="@dimen/large_size"
        android:visibility="INVISIBLE" />

    <ImageView
        android:id="@+id/profile_pic"
        android:layout_width="@dimen/small_size"
        android:layout_height="@dimen/small_size"
        android:layout_alignBottom="@id/spacer"
        android:layout_alignParentLeft="true"
        android:src="@drawable/some_image" />

    <ImageView
        android:id="@+id/extra_pic"
        android:layout_width="@dimen/large_size"
        android:layout_height="@dimen/large_size"
        android:layout_alignBottom="@id/profile_pic"
        android:layout_toRightOf="@id/profile_pic" />

</RelativeLayout>

不可见的间隔视图占据较大的高度,然后其他组件与间隔物对齐。这会导致RelativeLayout为您提供合适的高度。