如何让布局占据其他RelativeLayout未使用的全部剩余空间?
如何在RelativeLayout中让布局占据剩余空间
嘿,这个需求我熟!RelativeLayout本身不像LinearLayout那样有直接的layout_weight属性来分配剩余空间,但咱们可以通过组合它的定位属性来实现,分两种常见场景给你拆解:
场景1:让顶层的MIDDLE布局占据TOP和BOTTOM之间的剩余空间
假设你的BOTTOM布局也是wrap_content高度,那只需要给三个顶层布局加上这些属性即可:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/TOP" android:layout_width="match_parent" android:layout_height="wrap_content" <!-- 你的TOP布局内容 --> /> <RelativeLayout android:id="@+id/MIDDLE" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/TOP" android:layout_above="@id/BOTTOM"> <!-- 你的mid1、mid2子布局 --> </RelativeLayout> <RelativeLayout android:id="@+id/BOTTOM" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" <!-- 你的BOTTOM布局内容 --> /> </RelativeLayout>
核心逻辑是:用layout_below把MIDDLE钉在TOP下方,用layout_above把它钉在BOTTOM上方,再给它设置match_parent的宽高,它就会自动填充TOP和BOTTOM之间的所有剩余空间。
场景2:让MIDDLE内部的某个子布局(比如mid1)占据剩余空间
如果是想让MIDDLE里的mid1占满MIDDLE容器除了mid2之外的空间,这样操作:
<RelativeLayout android:id="@+id/MIDDLE" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/TOP" android:layout_above="@id/BOTTOM"> <RelativeLayout android:id="@+id/mid2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" <!-- mid2的内容 --> /> <RelativeLayout android:id="@+id/mid1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_toLeftOf="@id/mid2" <!-- mid1的内容 --> /> </RelativeLayout>
这里的思路是:先把mid2固定在MIDDLE的右上角(layout_alignParentTop+layout_alignParentEnd),然后让mid1贴住MIDDLE的左、上、下边缘,同时在mid2的左边,这样mid1就会自动填充剩下的所有空间。
额外小建议
如果你的布局结构没有强依赖RelativeLayout的复杂定位,换成垂直LinearLayout会更简单:给顶层LinearLayout设置android:orientation="vertical",然后给MIDDLE布局加上android:layout_weight="1",TOP和BOTTOM保持wrap_content,这样MIDDLE会自动占据所有剩余空间,代码更简洁。
内容的提问来源于stack exchange,提问作者Sanjay Singh
相关产品推荐
相关产品推荐

