android下的相对布局2项

我有这样的相对布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/single_row" android:padding="12dip"> <ImageView android:id="@+id/page_image" android:layout_marginRight="6dip" android:layout_width="66dip" android:layout_height="66dip" android:layout_alignParentLeft="true" android:src="@drawable/no_photo" /> <TextView android:id="@+id/page_name" style="@style/pulse_content" android:layout_alignTop="@id/page_image" android:layout_toRightOf="@id/page_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/page_desc" android:layout_below="@id/page_name" style="@style/pulse_content" android:layout_alignLeft="@id/page_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Principal Consultant" /> <Button android:id="@+id/follow_button" android:layout_below="@id/author_image" android:layout_marginTop="15dip" android:layout_alignParentBottom="true" android:text="Follow" style="@style/follow_button" /> </RelativeLayout> 

我遇到的问题是,我希望follow_button在page_desc以及page_image之下。 有时page_desc内容的高度会大于图像的大小,有时不会。 问题是,如果我设置下面的图片或描述follow_button,那么另一个将被剪辑。 有没有一种有效的方式来确保图像或page_desc总是可见的,并在button上方?

干得好:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/single_row" android:padding="12dip"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/page_image" android:layout_marginRight="6dip" android:layout_width="66dip" android:layout_height="66dip" android:layout_alignParentLeft="true" android:src="@drawable/no_photo" /> <TextView android:id="@+id/page_name" style="@style/pulse_content" android:layout_alignTop="@id/page_image" android:layout_toRightOf="@id/page_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/page_desc" android:layout_below="@id/page_name" style="@style/pulse_content" android:layout_alignLeft="@id/page_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Principal Consultant" /> </RelativeLayout> <Button android:id="@+id/follow_button" android:layout_marginTop="15dip" android:text="Follow" style="@style/follow_button" /> </LinearLayout> 

这里的答案只需要很less的改变。 你的大部分布局是正确的,但是,有一个选项搞乱了一切。 AlignParentXXXX通常会比您的LayoutXXXX选项具有“虚假”的优先级。 因此,通过将Button设置为AlignParentBottom,您可以告诉RelativeLayout Button的大小不是在父级布局大小中计算的。

您可以通过简单地从Button中删除AlignParent =“true”来解决问题。 结果代码在下面并经过testing。 我相信这个解决scheme符合你的愿望。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/single_row" android:padding="12dip"> <ImageView android:id="@+id/page_image" android:layout_marginRight="6dip" android:layout_width="66dip" android:layout_height="66dip" android:layout_alignParentLeft="true" android:src="@drawable/no_photo" /> <TextView android:id="@+id/page_name" style="@style/pulse_content" android:layout_alignTop="@id/page_image" android:layout_toRightOf="@id/page_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/page_desc" android:layout_below="@id/page_name" style="@style/pulse_content" android:layout_alignLeft="@id/page_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Principal Consultant" /> <Button android:id="@+id/follow_button" android:layout_below="@id/author_image" android:layout_marginTop="15dip" android:text="Follow" style="@style/follow_button" /> </RelativeLayout> 

当WrapContent在Parent上时,我遇到了许多与AlignParent类似的问题。 如果不做好准备,“上面”和“下面”的定位会产生不希望的行为。 我发现,一般来说,最好只使用一个或另一个(如果有的话),并排列在上面或下面的其余部分。

因为在RelativeLayout中所有的东西都是相互依赖的,所以你把它放在什么顺序里是没有关系的,但是如果你试图在创build它之前访问一个视图,那么它是无关紧要的。 例如,使用android:layout_below属性并不是您想要的button。 如果你设置其他视图android:layout_above这个button,它会使视图总是在它上面。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/single_row" android:padding="12dip"> <Button android:id="@+id/follow_button" android:layout_marginTop="15dip" android:layout_alignParentBottom="true" android:text="Follow" style="@style/follow_button" /> <ImageView android:id="@+id/page_image" android:layout_above="@id/follow_button" android:layout_marginRight="6dip" android:layout_width="66dip" android:layout_height="66dip" android:layout_alignParentLeft="true" android:src="@drawable/no_photo" /> <TextView android:id="@+id/page_name" android:layout_above="@id/follow_button" style="@style/pulse_content" android:layout_alignTop="@id/page_image" android:layout_toRightOf="@id/page_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/page_desc" android:layout_above="@id/follow_button" android:layout_below="@id/page_name" style="@style/pulse_content" android:layout_alignLeft="@id/page_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Principal Consultant" /> </RelativeLayout>