创建三个等距(子)布局,其中第一个在顶部,第三个在底部
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_a
和 sub_layout_b
的 FrameLayout
可以是任何布局 - 只要确保 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>
我已经尝试了很长时间,但没有为下面的布局问题找到令人信服的解决方案。例如。如果我使用 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_a
和 sub_layout_b
的 FrameLayout
可以是任何布局 - 只要确保 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>