RecyclerView带有动作按钮作为最后一个元素,但是当有很多项目时它会浮动或粘在底部

时间:2018-01-10 19:30:28

标签: android android-layout android-recyclerview

我要实现的是一个屏幕,我有一个显示列表的RecyclerView ..它可能有很多或很少的项目,当它有很多项目时,Button必须在屏幕的末尾浮动和粘滞。

如果项目很少,屏幕上有空格,则该按钮必须显示为RecyclerView列表中的最后一个元素。

按钮是一个带背景的矩形凸起按钮。是否有任何建议如何实现这样的目标。

3 个答案:

答案 0 :(得分:1)

这样做

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_gravity="bottom|center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>

具有多项

时的结果

enter image description here

什么时候有几个项目

enter image description here

答案 1 :(得分:1)

你可以这样做,

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weight_sum ="10">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9"/>
        <Button
            android:text="button"
            android:layout_width="match_parent"
            android:layout_height="0dp" 
            android:layout_weight="1"/>
</LinearLayout>

这与上面的答案相同。但不同之处在于按钮将始终在底部与重量1对齐。

答案 2 :(得分:0)

一个选项是让按钮在列表视图上方全部浮动,并手动定位以使其显示在列表的底部。如果您控制位置,您可以确定它何时应该粘在底部。

请参阅this帖子,了解如何在运行时获取视图的高度。

view.measure(ViewGroup.LayoutParams.WRAP_CONTENT,
  ViewGroup.LayoutParams.WRAP_CONTENT);

int height=view.getMeasuredHeight();

并查看有关如何获取屏幕高度的this文章

int screenHeight = getWindowManager().getDefaultDisplay().getHeight()

然后在你的layout.xml中你可以放

`android:layout_alignParentBottom="true"` on the element

然后使用this信息来定位按钮

现在魔术发生了

int offset = screenHeight - ButtonHeight - listHeight;
if(offset < 0) offset = 0;
btn.setTop(offset);