在 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 无作用等问题