因此,如果您的RecyclerView延伸到屏幕的末尾并使用FloatingActionButton或第三方FloatingActionMenu,那么掩盖就会出现轻微问题:如果您滚动到列表的末尾,浮动按钮覆盖了行的一部分,没有办法看到或找到它下面的内容。
Android是否允许您:
和
编辑:或者,或者,在RecyclerView的末尾添加动态填充,只有在你完全滚动的情况下才会显示?
答案 0 :(得分:6)
解决覆盖部分UI问题的常见模式是在用户开始向下滚动时隐藏FAB ...您可以通过此代码片段(与RecyclerView一起使用)来实现此目的:
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();
}
}
});
如果您坚持将其隐藏在最后并且您正在使用RecyclerView和LinearLayoutManager,则可以在OnScrollListener回调期间检查LayoutManager对象上的方法findLastCompletelyVisibleItemPosition()
...
答案 1 :(得分:0)
当然有可能。该解决方案已发布here。
其背后的主要思想是覆盖和更改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);
}
}
});
}