创建三个等距(子)布局,其中第一个在顶部,第三个在底部

Create three equally spaced (sub-) Layouts where 1st is on top and 3rd is on bottom

我已经尝试了很长时间,但没有为下面的布局问题找到令人信服的解决方案。例如。如果我使用 RelativeLayout 作为容器,我可以使用 for (sub-) Layout A

 android:layout_alignParentTop="true"

对于(子)布局 C

android:layout_alignParentBottom="true"> 

但似乎不可能将布局 B 放置为两个空间具有相同高度的方式。有没有人在 .xml?

中看到解决方案

将元素堆叠在一起时,LinearLayout is an easy choice. With sub-layout A and sub-layout C taking up only the space they need, the remaining space is then allocated to Sub-layout B and any spacing needed to fill the remaining space. This can be done by wrapping Sub-layout B in a FrameLayout:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <FrameLayout
        android:id="@+id/sub_layout_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <FrameLayout
            android:id="@+id/sub_layout_b"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical">
        </FrameLayout>
    </FrameLayout>
    <FrameLayout
        android:id="@+id/sub_layout_c"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>
</LinearLayout>

您会注意到 sub_layout_asub_layout_bFrameLayout 可以是任何布局 - 只要确保 layout_height="wrap_content"(或固定值)以便它们只拿他们需要的space。

剩余的 space 通过使用 layout_height="0dp"layout_weight="1" 分配给中间的 FrameLayout - layout_weight 是将其拉伸以填充所有剩下的space。这允许我们通过使用 android:layout_gravity="center_vertical" 将内部 sub_layout_b 置于 space 的中心,在 sub_layout_b 的两侧留下等量的空 space。 =23=]

试试这个(抱歉我现在不能测试):

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Any_layout_type_you_want
        android:id="@+id/sub_layout_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        ...
    </Any_layout_type_you_want>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    <Any_layout_type_you_want
        android:id="@+id/sub_layout_b"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        ...
    </Any_layout_type_you_want>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    <Any_layout_type_you_want
        android:id="@+id/sub_layout_c"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        ...
    </Any_layout_type_you_want>

</LinearLayout>