如何在GridLayout中限制ListView的高度?

Mic*_*ann 5 android android-layout android-gridlayout

我有一个GridLayout包含a ListView和a TextView.当项目被添加到ListView它时,它将增大尺寸并将其TextView下方推出屏幕.我认为通过设置layout_gravity="fill"ListView它根本不会增长,而是占用所有可用空间.

如何配置ListView占用可用空间而不是增长并将其下方的视图推出屏幕?

我正在寻找一个使用的解决方案GridLayout.我知道在我的情况下,一个人 LinearLayout也会工作.然而,这只是一个最小的测试用例来说明我的问题.

如果可能的话,我不想以编程方式设置高度.

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:columnCount="1"
    app:useDefaultMargins="true" >

    <ListView
        app:layout_gravity="fill" />

    <TextView
        android:text="TextView" />

</android.support.v7.widget.GridLayout>
Run Code Online (Sandbox Code Playgroud)

Oni*_*nik 7

这个答案扩展了我对这个问题的评论并尝试解释why this cannot be done with XML via GridLayout's attributes.

添加GridLayout到框架允许解决有关嵌套布局的一系列缺点,其中一个缺点"inability to control alignment along both horizontal and vertical axes simultaneously"如Philip Milne 的文章New Layout Widgets:Space and GridLayout中所述.

该对齐控制由layout_gravity参数执行,该参数的description状态为参数().基本上,它与文章中提到的相同:正如我们所知道的那样,一旦视图占据了屏幕的整个高度(就像你的情况一样),它下面的视图就会出现在屏幕后面.布局方向设置为."specifies how a component should be placed in its group of cells",NOT within a root layoutLinearLayout"Alignment/gravity also works just like gravity in LinearLayout..."LinearLayoutsListView"vertical"

如果我们查看GridLayout.LayoutParams文档,我们将找不到任何允许单元格组中的组件粘贴到父布局的某个位置并保持在与该布局中的其他组件的大小无关的位置的参数.组; 类似于layout_align[...]RelativeLayout 的参数.

我最好的猜测是缺少这种参数GridLayout是比嵌套布局更好的对齐控制.

我确定你使用除GridLayout's属性之外的方法知道问题的解决方案.我只是建议一个让答案看起来完成:

<GridLayout
    ... >

    <RelativeLayout
       ... >

        <TextView
            ...
            android:id="@+id/tv"
            android:layout_alignParentBottom="true" />

        <ListView
            ...
            android:layout_above="@id/tv">
         </ListView>

    </RelativeLayout>

</GridLayout>
Run Code Online (Sandbox Code Playgroud)