其他分享
首页 > 其他分享> > android – 如何在GridLayout中限制ListView的高度?

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

作者:互联网

我有一个包含ListView和TextView的GridLayout.添加项目时
对于ListView,它的大小会增加,并将TextView下方的TextView推出
屏幕.我认为通过在ListView上设置layout_gravity =“fill”它
根本不会增长,而是占用所有可用空间.

如何配置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>

解决方法:

这个答案扩展了我对这个问题的评论,试图解释为什么不能通过GridLayout的属性用XML来完成.

将GridLayout添加到框架允许解决关于嵌套布局的一系列缺点,其中之一是“无法同时控制水平轴和垂直轴上的对齐”,如Philip Milne的文章New Layout Widgets: Space and GridLayout所述.

此对齐控制由layout_gravity参数执行,其参数description表示参数“指定组件应如何放置在其单元格组中”(不在根布局中).基本上,它与LinearLayout的相同,也在文章中提到:“对齐/重力也像LinearLayout中的重力一样工作……”正如我们所知,对于LinearLayouts,一旦视图占据了整个高度屏幕(就像你的情况下的ListView),如果布局方向设置为“垂直”,它下面的视图将在屏幕后面.

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

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

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

<GridLayout
    ... >

    <RelativeLayout
       ... >

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

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

    </RelativeLayout>

</GridLayout>

标签:android,android-layout,android-gridlayout
来源: https://codeday.me/bug/20190609/1207206.html