如何将按钮放在回收站视图的顶部?

Posted

技术标签:

【中文标题】如何将按钮放在回收站视图的顶部?【英文标题】:How to put button on top of a Recycler View? 【发布时间】:2021-07-22 13:51:21 【问题描述】:

我正在使用 android Studio 开发一个 Android 应用,但在使用回收站视图顶部的浮动按钮时遇到问题。 我想要实现的是在我的回收站视图顶部有一个浮动按钮,当我滚动到回收站视图的底部时,该按钮不应覆盖我列表中的最后一项。

如果我在我的回收站视图中添加填充或边距,这就是我得到的:

结果是没有填充也没有边距:

我的目标是在滚动到最后一项时得到这个:

当我不在最后一项时:

这是我目前拥有的代码:

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_
        android:layout_
        android:background="@color/white"
        tools:context=".frontend.MainActivity">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/activityList"
            android:layout_
            android:layout_
            android:animationCache="true"
            android:background="@color/white"
            android:layout_marginTop="10dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/addRoutine"
            style="@style/Widget.AppCompat.Button"
            android:layout_
            android:layout_
            android:background="@drawable/round_button"
            app:iconPadding="0dp"
            android:layout_marginBottom="10dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

如果有人能说出这是如何实现的,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

只需将ItemDecoration 附加到回收站视图即可实现此目的。

第一步:添加这个Item装饰类

class BottomItemDecoration : RecyclerView.ItemDecoration() 

override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) 
    super.getItemOffsets(outRect, view, parent, state)
    if(parent.getChildAdapterPosition(view) == state.itemCount - 1) // Check if it's the last item
        outRect.bottom = 80 // Space(in pixels) to give after the last item for that floating button

第 2 步:将 BottomItemDecoration 附加到回收站视图

recyclerView.addItemDecoration(BottomItemDecoration())

布局 XML 文件无需更改。

【讨论】:

【参考方案2】:

我认为您可以在 RecyclerView 的Adapter 中创建 2 个ViewType,其中一个是实际内容,另一个是空白。在Adapter 中,您覆盖了getItemViewType(int position) 方法(此方法用于决定使用哪个视图持有者)。 注意:在这个方法中,我们只在 Recycler 视图滚动到最后一项 (position == yourList.size() -1) 时返回第二个视图持有者(空白的)。举个例子:

    @Override
    public int getItemViewType(int position) 
        if (position == yourList.size() - 1)
            return CONTENT_VIEW_TYPE; //the actual content View Holder
        else return BLANK_VIEW_TYPE; //the blank View Holder
    

【讨论】:

【参考方案3】:

我认为你可以使用这种方法, 可能重复:How to allow scrolling the last item of recyclerview above of the FAB?

 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener()
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy)
        if (dy > 0) 
            fab.hide();
            return;
        
        if (dy < 0) 
            fab.show();
        
    
);

【讨论】:

以上是关于如何将按钮放在回收站视图的顶部?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用android中的回收器视图将事件放在日历中[重复]

如何访问回收站视图中的按钮?

每次重新创建滚动位置后,如何将滚动位置保存在回收站视图中?

如何根据位置从“回收”视图中删除Firebase数据库密钥

如何将点击监听器添加到我的回收器视图(Android kotlin)[重复]

如何在主要活动中使用按钮 onclicklistener 进行回收视图项目