为RelativeLayout中的儿童使用match_parent属性

简而言之,是否有可能告诉一个在RelativeLayout的孩子始终匹配那个RelativeLayout的高度,而不pipe该RelativeLayout的其他孩子如何performance? 简而言之,就是这样。 下面的细节。

我想要实现的是一个至less有三个视图的ListView行,其中一个视图在列表条目的右侧(下面的红色视图)将是一个条带。 我遇到的问题是在左侧有一个TextView ,并依赖于我有多less文本,条纹将不会填充整个布局。 下面的图片可以很清楚地解释这一点。

ListView项目布局:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <View android:id="@+id/bottom_line" android:layout_width="match_parent" android:layout_height="5dp" android:layout_alignParentBottom="true" android:background="#fc0" /> <!-- Why match_parent does not work in view below? --> <View android:id="@+id/stripe" android:layout_width="80dp" android:layout_height="wrap_content" android:minHeight="50dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:background="#f00" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/stripe" android:text="This is a very long line, meant to completely break the match_parent property of the box at right" style="?android:textAppearanceLarge"/> </RelativeLayout> 

结果:

带有小孩的RelativeLayout不能垂直填充整个布局

将条纹和根高设置为match_parent没有区别。 我做的。

重复这个问题,我希望红色条纹始终垂直填充父项。 你可以看到条纹没有alignment到根的顶部。

注意:上面的例子是我能想到的最简单,自包含的例子。 它只是一个ListActivity ,其中匿名ArrayAdapter由静态String数组填充。 onCreate的相关代码最多只有8行,所以不用担心。 这真的是布局。 此外,我已经与嵌套的LinearLayout工作,但我想尽可能减less我的布局结构的深度。 按预期, LinearLayout可以正常工作。

Solutions Collecting From Web of "为RelativeLayout中的儿童使用match_parent属性"

我有相同的要求,我的解决scheme是将红色条纹的顶部alignment到父项的顶部,条纹的底部alignment左边的文本视图的底部。 在这种情况下的高度变得无关紧要。 你可以使用wrap_content或者match_parent

简单地把你的主要的RelativeLayout放在一个LinearLayout ,然后计算child Views的高度就会是正确的。 我有同样的问题,它为我工作。

尝试这个:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <View android:id="@+id/stripe" android:layout_width="80dp" android:layout_height="match_parent" android:layout_alignBottom="@id/text" android:layout_alignParentRight="true" android:layout_alignTop="@id/text" android:background="#f00" android:minHeight="50dp"/> <TextView android:id="@+id/text" style="?android:textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/stripe" android:text="This is a very long line, meant to completely break the match_parent property of the box at right"/> <View android:id="@+id/bottom_line" android:layout_width="match_parent" android:layout_height="5dp" android:layout_below="@id/text" android:background="#fc0"/> </RelativeLayout> 

红色视图的顶部和底部alignment现在与textview相同。

这是一个恼人的问题,你需要将RelativeLayout放在LinearLayout中

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:minHeight="40dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/deleteItem" android:layout_width="60dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:clickable="true" android:background="@color/background_grey" > <TextView style="@style/SmallButtonFont" android:layout_marginRight="12dp" android:layout_centerInParent="true" android:text="CLEAR" android:textColor="@color/globalRedLight" /> </RelativeLayout> </RelativeLayout> </LinearLayout> 

将收听者添加到列表项目持有人,所以每当持有人更换高度时,将该高度设置为小孩。 i1是顶部,而i3是底部。

 parent.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) { child.setTop(i1); child.setBottom(i3); } });