RelativeLayout占用了所有空间,即使我已将其高度设置为" wrap_content"

时间:2014-09-09 09:50:08

标签: android android-layout alignment textview android-relativelayout

背景

我在FrameLayout / RelativeLayout中有一个RelativeLayout(对我来说并不重要),它应位于屏幕的底部(如工具栏),并且应该包含一些视图。

它的高度设置为" wrap_content"它的儿童观点也是如此。

此布局的子视图是:左侧是textView,右侧是水平LinearLayout,带有几个按钮。

问题

似乎无论我做什么,textview都会导致RelativeLayout占用整个空间,而不仅仅是它的子节点。

代码

这是导致此问题的最小XML内容。我删除了额外的东西(LinearLayout及其子代,以及一些不重要的属性),因为如果我删除TextView,它们不会导致此问题:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FF000000" >

    <!-- Here I've put some views that don't have any relation with the views below, so it doesn't have anything with do with the problem -->

    <RelativeLayout
        android:id="@+id/RelativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/vertical_gradient_transparent_to_black" >

        <!-- Here I've put a LinearLayout that doesn't cause the problem, so I've removed it for simplicity-->

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"/>
    </RelativeLayout>

</RelativeLayout>

我尝试了很多可能的属性,并尝试添加额外的布局来尝试傻瓜&#34; RelativeLayout,但没有一个成功。

问题

为什么会发生?

一个可行的解决方案是使用Horizo​​ntal LinearLayout(TextView的权重)而不是RelativeLayout,但我仍然想知道为什么我不能使用RelativeLayout,以及它为什么会出现。还有如何在使用RelativeLayout时修复它。

3 个答案:

答案 0 :(得分:2)

来自RelativeLayout doc:

  

课程概述

     

一种布局,其中儿童的位置可以相互描述或与父母相关。

     

请注意,您不能在RelativeLayout的大小与其子项的位置之间存在循环依赖关系。 例如,您不能将RelativeLayout的高度设置为WRAP_CONTENT且子级设置为ALIGN_PARENT_BOTTOM

Class documentation

这正是你的情况。 RelativeLayout无法做到这一点。

答案 1 :(得分:0)

之前我遇到过同样的问题,这可能是由android:layout_alignParentBottom属性引起的。也许你可以找到另一种方法来达到你想要的效果。有关详细信息,请参阅this

答案 2 :(得分:0)

这是一种奇怪的问题。也许别人有解释。

当我删除行

时,我发现它有效
android:layout_alignParentBottom="true"/>

当我尝试这样的时候它也有用

<TextView
    android:layout_width="match_parent"
    android:layout_alignParentTop="true"
    android:layout_height="wrap_content"/>