【问题标题】:TextViews on top and bottom, remaining space filled with ListView顶部和底部的 TextViews,剩余空间被 ListView 填充
【发布时间】:2013-11-01 13:35:05
【问题描述】:

我正在尝试将一个 TextView 放在顶部,另一个放在底部,并在使用剩余空间之间放置一个 ListView。 但是,我的 ListView 将所有空间都放到了底部,使得最后一个 TextView 甚至不显示。我可以让它显示的唯一方法是给 ListView 一个固定的高度,比如 100dp。

我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    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=".MainActivity" >

    <TextView
        android:id="@+id/id_task_list_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/title_task_list"
        style="?android:attr/listSeparatorTextViewStyle" />

    <ListView
        android:id="@+id/id_task_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/id_task_list_title" />

    <TextView
        android:id="@+id/id_task_list_test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/id_task_list_view"
        android:text="OMG Test" />

</RelativeLayout>

【问题讨论】:

    标签: android listview layout textview android-relativelayout


    【解决方案1】:

    如下使用LinearLayout:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    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=".MainActivity"
                    android:orientation="vertical">
    
        <TextView
                android:id="@+id/id_task_list_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/title_task_list"
                style="?android:attr/listSeparatorTextViewStyle" />
    
        <ListView
                android:id="@+id/id_task_list_view"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>
    
        <TextView
                android:id="@+id/id_task_list_test"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="OMG Test" />
    
    </LinearLayout>
    

    【讨论】:

    • 我暂时使用这种方式。
    【解决方案2】:

    这应该可以通过使用 android:layout_above 和 android:layout_below 将 ListView 放在 TextView 之间来解决您的问题:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        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=".MainActivity" >
    
        <TextView
            android:id="@+id/id_task_list_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/title_task_list"
            style="?android:attr/listSeparatorTextViewStyle" />
    
        <TextView
            android:id="@+id/id_task_list_test"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:text="OMG Test" />
    
        <ListView
            android:id="@+id/id_task_list_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/id_task_list_test"
            android:layout_below="@id/id_task_list_title"/>
    
    
    </RelativeLayout>
    

    【讨论】:

      【解决方案3】:

      两种方式之一都可以实现

      1) 使用线性布局(直截了当)

      2) 使用相对布局并参考相对于其他视图的视图位置。

      你的情况

      1) 相对于 LinearLayout 进行更改并完成工作。

      2)

          <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              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=".MainActivity" >
      
              <TextView
                  android:id="@+id/id_task_list_title"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/title_task_list"
                  style="?android:attr/listSeparatorTextViewStyle" />
      
              <ListView
                  android:layout_below="@+id/id_task_list_title"
                  android:id="@+id/id_task_list_view"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/id_task_list_title" />
      
              <TextView
                  android:layout_below="@+id/id_task_list_view"
                  android:id="@+id/id_task_list_test"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/id_task_list_view"
                  android:text="OMG Test" />
      
          </RelativeLayout>
      

      【讨论】:

        【解决方案4】:

        这可以通过编码来完成,方法是获取屏幕高度并将布局参数宽度分配给这样的列表视图

        列表视图的高度=屏幕高度-(textView1的高度+textView2的高度)。

        【讨论】:

          【解决方案5】:

          不要使用 RelativeLayout ,而是使用具有垂直方向的 LinearLayout。

          我认为它解决了你的问题

          谢谢

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-18
            • 1970-01-01
            • 1970-01-01
            • 2020-08-25
            • 1970-01-01
            • 2011-06-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多