Android 当recyclerview有一个项目时防止隐藏工具栏
我有一些问题。当recyclerview只有少量项(1,2,3,4)时,工具栏将隐藏。这是不必要的行为 当recyclerview只有很少的项目并且没有在recyclerview上滚动时,如何防止工具栏隐藏 main\u recyclerview.xmlAndroid 当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将滚动事件发送给其父级
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);