Android 滚动到列表底部时是否隐藏浮动操作项?

Android 滚动到列表底部时是否隐藏浮动操作项?,android,scroll,android-recyclerview,floating-action-button,Android,Scroll,Android Recyclerview,Floating Action Button,因此,如果您有一个扩展到屏幕末尾的RecyclerView,并且使用了FloatingAction按钮或第三方FloatingAction菜单,那么掩盖就有一个小问题:如果您滚动到列表的末尾,则floating按钮掩盖了行的一部分,并且无法查看或访问它下面的内容 安卓有没有办法让你: 检测列表中是否有足够数量的项目,即屏幕底部是否有可见的行 及 如果向下滚动到最后,请将按钮滑出,如果开始向上滚动,请将按钮滑回 编辑:或者,在RecyclerView的末尾添加动态填充,只有当您一直向下滚动时才会显

因此,如果您有一个扩展到屏幕末尾的RecyclerView,并且使用了FloatingAction按钮或第三方FloatingAction菜单,那么掩盖就有一个小问题:如果您滚动到列表的末尾,则floating按钮掩盖了行的一部分,并且无法查看或访问它下面的内容

安卓有没有办法让你:

  • 检测列表中是否有足够数量的项目,即屏幕底部是否有可见的行
  • 如果向下滚动到最后,请将按钮滑出,如果开始向上滚动,请将按钮滑回

  • 编辑:或者,在RecyclerView的末尾添加动态填充,只有当您一直向下滚动时才会显示该视图?

    当然可以。解决方案已发布。 它背后的主要思想是,
    FloatingActionButton.Behavior
    被覆盖和更改,以便它对
    RecyclerView
    CoordinatorLayout
    滚动做出反应

    但是,在您的情况下,
    RecyclerViewScrollListener
    必须不同。以下是实施方案:

    private class RecyclerViewScrollListener extends RecyclerView.OnScrollListener {
        FloatingActionButton mChild;
    
        public RecyclerViewScrollListener(FloatingActionButton child) {
            this.mChild = child;
        }
    
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == RecyclerView.SCROLL_STATE_IDLE && recyclerView.canScrollVertically(Integer.MAX_VALUE)) {
                mChild.show();
            } else {
                mChild.hide();
            }
        }
    
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (!recyclerView.canScrollVertically(Integer.MAX_VALUE)) {
                mChild.hide();
            }
        }
    }
    
    编辑:

    用数据填充
    RecyclerView
    时,在其上调用此函数以禁用或启用滚动:

    private void changeCoordinatorLayoutScrollPossibility(final RecyclerView recyclerView) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                if (recyclerView.getMeasuredHeight() < alertsRecyclerView.computeVerticalScrollRange()) {
                    recyclerView.setNestedScrollingEnabled(true);
                } else {
                    recyclerView.setNestedScrollingEnabled(false);
                }
            }
        });
    }
    
    private void changecordinator布局交叉可能性(最终回收视图回收视图){
    new Handler().post(new Runnable()){
    @凌驾
    公开募捐{
    if(recyclerView.getMeasuredHeight()
    解决掩盖部分用户界面问题的常见模式是在用户开始向下滚动时立即隐藏FAB。。。您可以通过以下代码片段(与RecyclerView一起使用)实现这一点:


    如果坚持将其隐藏在最末端,并且将RecyclerView与LinearLayoutManager一起使用,则可以在OnScrollListener回调期间在LayoutManager对象上检查方法
    findLastCompletelyVisibleItemPosition()

    我试图理解你想要什么,是这样的:类似,是的,除了floatingAction按钮,而不是工具栏,并且只有当你在列表的末尾时(因此按钮不会覆盖行)。或者如果有方法调用
    view.setPadding(0,padding,0,0)在RecyclerView的末尾(但我不知道是否有一种干净的方法可以做到这一点而不让它显得紧张)如何提供我无法实现的东西的屏幕截图?我只是试图在滚动到列表末尾时隐藏按钮,这样就不会覆盖RecyclerView中的最后一项,其中列表中的项目总数>=一次可以放入视图的项目数(如果按钮没有覆盖任何内容,则隐藏按钮没有意义)如何将其应用于当前的RecyclerView/FloatingActionButton?addOnScrollListener?是的。方法,如何做到这一点是在我提供的链接内。如果列表中只有(例如)一项,则按钮将永久隐藏,并且永远不会返回更新的答案。不幸的是,此按钮不起作用;小列表的按钮仍然没有。除非我必须以某种特定的顺序来称之为它,这与我一开始所追求的并不完全相同,但它解决了问题,而且实际上似乎起到了作用;非常感谢。
    
        fDemandsRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                if(dy > 0 ){
                    if(fFab.isShown()) fFab.hide();
                } else {
                    if(!fFab.isShown()) fFab.show();
                }
            }
        });