Android 当recyclerview有一个项目时防止隐藏工具栏

Android 当recyclerview有一个项目时防止隐藏工具栏,android,toolbar,android-recyclerview,android-design-library,Android,Toolbar,Android Recyclerview,Android Design Library,我有一些问题。当recyclerview只有少量项(1,2,3,4)时,工具栏将隐藏。这是不必要的行为 当recyclerview只有很少的项目并且没有在recyclerview上滚动时,如何防止工具栏隐藏 main\u recyclerview.xml 您可能需要防止RecyclerView将滚动事件发送给其父级 private class NoScrollTouchListener implements RecyclerView.OnTouchListener{

我有一些问题。当recyclerview只有少量项(1,2,3,4)时,工具栏将隐藏。这是不必要的行为

当recyclerview只有很少的项目并且没有在recyclerview上滚动时,如何防止工具栏隐藏

main\u recyclerview.xml



您可能需要防止RecyclerView将滚动事件发送给其父级

     private class NoScrollTouchListener implements RecyclerView.OnTouchListener{
            private static final int MAX_CLICK_DURATION = 200;
            private long mStartClickTime;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN: {
                        mStartClickTime = SystemClock.currentThreadTimeMillis();
                        break;
                    }
                    case MotionEvent.ACTION_UP: {
                        long clickDuration = SystemClock.currentThreadTimeMillis() - mStartClickTime;
                        if(clickDuration <= MAX_CLICK_DURATION) {
                            return false;
                        }
                    }
                }
                if(v instanceof RecyclerView){
                    boolean isLastVisible = ((LinearLayoutManager)((RecyclerView) v).getLayoutManager()).findLastCompletelyVisibleItemPosition() == ((RecyclerView) v).getAdapter().getItemCount() - 1);

   boolean isFirstVisible =  ((LinearLayoutManager)((RecyclerView) v).getLayoutManager()).findFirstCompletelyVisibleItemPosition() == 0);
                   return isLastVisible && isFirstVisible;
                }
                return true;
            }
        }
另请参见RecyclerView父级的RequestDisallowWinterCeptTouchEvent(disallow)(即
CoordinatorLayout

防止任何滚动行为的另一种方法是将data observer注册到
RecyclerView.Adapter
,并使用上述条件切换
工具栏的
布局\u滚动标志

     boolean isLastVisible = ((LinearLayoutManager)((RecyclerView) v).getLayoutManager()).findLastCompletelyVisibleItemPosition() == ((RecyclerView) v).getAdapter().getItemCount() - 1);

   boolean isFirstVisible =  ((LinearLayoutManager)((RecyclerView) v).getLayoutManager()).findFirstCompletelyVisibleItemPosition() == 0);

                if(isFirstVisible && isLastVisible){
                    mOldScrollFlags = mOldScrollFlags == -1 ?  params.getScrollFlags() : mOldScrolFlags;
                    params.setScrollFlags(0);
                }else{
                    params.setScrollFlags(mOldScrollFlags);
                }
                mToolbar.setLayoutParams(params);

当您将滚动标志设置为0时,AppBarLayout会将该视图排除在整个灵活范围内的计算范围之外

mOldScrollFlags的初始值是多少?
mOldScrollFlags=mOldScrollFlags==-1?getScrollFlags():mOldScrolFlags如您所愿。:)
((LinearLayoutManager)mRecyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition() == mRecyclerView.getAdapter().getItemCount() - 1);
     boolean isLastVisible = ((LinearLayoutManager)((RecyclerView) v).getLayoutManager()).findLastCompletelyVisibleItemPosition() == ((RecyclerView) v).getAdapter().getItemCount() - 1);

   boolean isFirstVisible =  ((LinearLayoutManager)((RecyclerView) v).getLayoutManager()).findFirstCompletelyVisibleItemPosition() == 0);

                if(isFirstVisible && isLastVisible){
                    mOldScrollFlags = mOldScrollFlags == -1 ?  params.getScrollFlags() : mOldScrolFlags;
                    params.setScrollFlags(0);
                }else{
                    params.setScrollFlags(mOldScrollFlags);
                }
                mToolbar.setLayoutParams(params);