Android视图填充布局的中心区域

时间:2014-05-19 23:50:23

标签: android android-layout listview

我有这个布局:

Activity's layout

所有视图都水平填充整个空间,它们位于LinearLayout垂直方向内。蓝色部分具有固定的高度(它们具有wrap_content属性)。

红色部分是ListView。如果列表中没有足够的元素,同时如果它有更多的元素,它会阻止它向下推动最后两个元素,如何填充该中心空间?

到目前为止,它没有按下它下面的两个视图(使用layout_weight="1"属性),但是如果它没有足够的元素,它会缩小并使这两个元素上升,留下一个丑陋的他们下面有空白。

这就是:

What i've got

这就是我的期望:

Expected result

请注意,即使ListView较小,最后两个视图也不会上升。

到目前为止,我已经尝试过:

  • 给所有观点一个重量(丑陋的展示,但有点作品)。
  • 为每个视图指定一个大小(不同设备上的结果不同)。
  • 为最后一个视图提供android:gravity="bottom"属性,但视图仍然在上升。

可行的方法

我一直在搞乱,我认为RelativeLayout可能有效,使用像layout_alignBottom这样的属性,而不是对齐到给定视图的末尾,它与它的开头对齐。

解决方案是使用RelativeLayout并将列表的layout_abovelayout_below属性设置为我想要将其对齐的元素。

3 个答案:

答案 0 :(得分:3)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.stackoverflow.app.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="48dp"
        android:text="@string/hello_world" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="48dp"
        android:text="@string/hello_world" />

</LinearLayout>

答案 1 :(得分:1)

如何将列表视图包装在布局中,并为布局指定固定高度。

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="300dp" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</RelativeLayout>

答案 2 :(得分:1)

这里有几个可能适合您的选项。让我知道它是怎么回事。

选项1: 将包含垂直方向的线性布局设置为fill_parent / match_parent(它们是相同的)。然后将底部2视图的重力或布局重力设置为底部。

选项2: 包含具有固定高度的线性布局中的列表视图。将列表视图设置为wrap_content。

编辑

你可以使用相对布局,这里的链接似乎做你需要的 http://www.javacodegeeks.com/2013/10/android-fixed-header-and-footer-with-scrollable-content-layout-example.html