在 RecyclerView 上设置最大高度

Posted

技术标签:

【中文标题】在 RecyclerView 上设置最大高度【英文标题】:Setting maximum height on RecyclerView 【发布时间】:2016-09-29 21:54:54 【问题描述】:

我有一个包含线性布局的对话框片段,其中涉及 RecyclerView 上方的 titleText,在最底部,recyclerView 下方有一个按钮。

由于 recyclerView 会根据适配器设置的项目数展开或折叠,因此按钮有时会被截断并且不再出现在屏幕上,因为 recyclerView 只会覆盖整个屏幕。

我的问题是,有没有一种方法可以设置 recyclerView 的最大高度,而无需隐藏下方的按钮。我也不想只给视图一个随机高度,以防 recyclerView 不包含任何项目,它只是一个空白部分。

如果您遇到过这个问题,请告诉我,以及您是如何解决这个问题的。谢谢!

【问题讨论】:

检查它对我有用link 【参考方案1】:

更新 您可以使用布局权重轻松实现此目的。这是一个例子:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_
             android:layout_>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <TextView
            android:layout_
            android:layout_
            android:gravity="center"
            android:text="Title"
            android:textSize="21sp"/>

        <android.support.v7.widget.RecyclerView
            android:layout_
            android:layout_
            android:paddingBottom="30dp">
        </android.support.v7.widget.RecyclerView>

    </LinearLayout>

    <Button
        android:layout_
        android:layout_
        android:layout_gravity="bottom"
        android:text="Submit"/>
</FrameLayout>

Title 和 RecyclerView 将根据内容包装内容,并且按钮将始终占据底部。

【讨论】:

这个解决方案本质上和设置一个layoutHeight参数是一样的,因为它仍然会将80%的视图分配给recyclerView,即使它是空的并且应该被压缩? 感谢您的更新!这是一个很酷的解决方案。然而,基本上这个按钮只会覆盖在 recyclerView 项目的顶部。 只需在您的回收站视图中添加一个填充底部。 我永远不会喜欢这个解决方案,因为它不能跨不同的屏幕进行扩展。而且它有不必要的视图嵌套。毫无疑问,它(在某种程度上)是有效的,但可以通过更简单的布局结构轻松实现所需的行为。 在你的布局中没有任何使用权重【参考方案2】:

我建议使用RelativeLayout,因为它可以处理像您这样的案例的视图定位,这样您就可以真正专注于主要设计。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_>
    <TextView
        android:id="@+id/title"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:text="Some title" />
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_
        android:layout_
        android:layout_below="@+id/title"
        android:layout_above="@+id/button"/>
    <Button
        android:id="@+id/button"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"/>
</RelativeLayout>

上面的 XML 代码是您需要的框架代码。您可以添加边距和尺寸来控制间距。但无论如何(除非您提供负边距)您的视图永远不会相互重叠。

使用 RelativeLayout 的主要技巧是能够使用 XML 标签,例如 android:layout_below 或 android:layout_above 或 android:layout_start 或 android:layout_end 以您的方式完美对齐您的视图 想要。

【讨论】:

以上是关于在 RecyclerView 上设置最大高度的主要内容,如果未能解决你的问题,请参考以下文章

如何将回收器高度设置为 recyclerView 中的最高项目?

Android RecyclerView详解及实现瀑布流式布局

如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白

RecyclerView常见问题解决方案,RecyclerView嵌套自动滚动,RecyclerView 高度设置wrap_content 无作用等问题

动态设置RecyclerView的高度

Grid形式的RecyclerView屏幕宽度自适应