LinearLayout:3个元素,顶部,中心,底部

时间:2015-05-28 14:51:23

标签: java android xml android-layout android-fragments

我有以下xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/topFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

        <ImageView
            android:id="@+id/imageViewTest"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_00" />

        <TextView
            android:id="@+id/textViewTest"
            android:layout_below="@+id/imageViewTest"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="This is a Test"/>

    </RelativeLayout>

    <FrameLayout
        android:id="@+id/bottomFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center_horizontal" />

</LinearLayout>
  • 第一个FrameLayout包含一个片段,其中包含一些按钮。
  • RelativeLayout包含例如图像(changig大小)和文本。
  • 最后一个FrameLayout还包含一个片段,其中包含一些按钮或某些文本或图像。

我的目标是: - 第一个FrameLayout位于顶部(可行) - RelativeLayout中的元素位于屏幕中间(不起作用) - 最后一个FrameLayout位于底部(不起作用)

它应该是这样的:

enter image description here

我之前在android:gravity="center"中使用RelativeLayout而第二次android:layout_gravity="bottom|center_horizontal" FrameLayout的尝试失败了。

2 个答案:

答案 0 :(得分:1)

使用相对布局并使用android:layout_centerHorizontal="true"代替重力。

修改

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
    android:id="@+id/topFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/topFragment">

    <ImageView
        android:id="@+id/imageViewTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_00"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/textViewTest"
        android:layout_below="@+id/imageViewTest"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This is a Test"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

<FrameLayout
    android:id="@+id/bottomFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" />

</RelativeLayout>

答案 1 :(得分:1)

LineareLayout更改为Relative并使用layout_centerInParent作为中间版面,将alignParentBottom更改为最后一版。

默认情况下,顶部View将固定在顶部

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"> //removed orientation as it won't be needed anymore

    <FrameLayout
        android:id="@+id/topFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:layout_width="wrap_content" // change here
        android:layout_height="wrap_content"
        android:layout_centernInParent="true">  // here

        <ImageView
            android:id="@+id/imageViewTest"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_00" />

        <TextView
            android:id="@+id/textViewTest"
            android:layout_below="@+id/imageViewTest"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="This is a Test"/>

    </RelativeLayout>

    <FrameLayout
        android:id="@+id/bottomFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" /> //here

</RelativeLayout>