如何使 FAB 在 AppBarLayout 在 CoordinatorLayout 中折叠之前对向下滚动事件做出反应
How to make the FAB react to downward scroll events before the AppBarLayout has collapsed in a CoordinatorLayout
-
android
-
floating-action-button
-
android-coordinatorlayout
-
android-appbarlayout
-
android-nestedscrollview
我正在尝试为 FAB 编写自定义行为。目前,我从 here 中获取的行为从调用 CoordinatorLayout.Behavior class 中的 onNestedScroll() 方法开始控制 FAB 的可见性。
但是,onNestedScroll() 仅检测向下滚动事件(即当 dyConsumed > 0
时)(注意: dyConsumed 是 onNestedScroll[ 的参数=36=]) 一旦 AppBarLayout 到达屏幕顶部(即当 AppBarLayout 折叠时),NestedScrollView(或另一个垂直滚动视图)的内容是屏幕上唯一可见的滚动内容。
我希望在 AppbBarLayout 折叠之前用户向下滚动后 FAB 消失。
我尝试让 FAB 依赖于另一个视图:
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
return dependency instanceof viewToDependOn;
}
然后当此视图更改状态时使视图消失:
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, final FloatingActionButton child, View dependency) {
child.setVisibility(View.GONE);
return true;
}
但是因为每次调用 FAB 依赖于方法的视图在触摸事件后过于频繁地调用 onDependentViewChanged,所以一旦 FAB 不可见我就无法再次显示它。
我的问题简而言之:如何在不依赖 AppBarLayout 的滚动事件的情况下切换 FAB 在 NestedScrollView 中的可见状态?
如果您需要更多代码,请告诉我,
提前致谢
你应该使用:
AppBarLayout.OnOffsetChangedListener
此方法:onOffsetChanged
onNestedScroll 只会检测与 collapsing/expanding AppBarLayout 无关的滚动事件。
在那里,你可以这样做:
if(verticalScroll == 0)
// appBarLayout Expanded
else if(verticalScroll == appBarLayout.totalScrollRange())
// appBarLayout Collapsed
并且hide/show你的FAB基于appBarLayout的一些偏移或collapse/expand模式
android
floating-action-button
android-coordinatorlayout
android-appbarlayout
android-nestedscrollview
我正在尝试为 FAB 编写自定义行为。目前,我从 here 中获取的行为从调用 CoordinatorLayout.Behavior class 中的 onNestedScroll() 方法开始控制 FAB 的可见性。
但是,onNestedScroll() 仅检测向下滚动事件(即当 dyConsumed > 0
时)(注意: dyConsumed 是 onNestedScroll[ 的参数=36=]) 一旦 AppBarLayout 到达屏幕顶部(即当 AppBarLayout 折叠时),NestedScrollView(或另一个垂直滚动视图)的内容是屏幕上唯一可见的滚动内容。
我希望在 AppbBarLayout 折叠之前用户向下滚动后 FAB 消失。
我尝试让 FAB 依赖于另一个视图:
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
return dependency instanceof viewToDependOn;
}
然后当此视图更改状态时使视图消失:
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, final FloatingActionButton child, View dependency) {
child.setVisibility(View.GONE);
return true;
}
但是因为每次调用 FAB 依赖于方法的视图在触摸事件后过于频繁地调用 onDependentViewChanged,所以一旦 FAB 不可见我就无法再次显示它。
我的问题简而言之:如何在不依赖 AppBarLayout 的滚动事件的情况下切换 FAB 在 NestedScrollView 中的可见状态?
如果您需要更多代码,请告诉我,
提前致谢
你应该使用:
AppBarLayout.OnOffsetChangedListener
此方法:onOffsetChanged
onNestedScroll 只会检测与 collapsing/expanding AppBarLayout 无关的滚动事件。
在那里,你可以这样做:
if(verticalScroll == 0)
// appBarLayout Expanded
else if(verticalScroll == appBarLayout.totalScrollRange())
// appBarLayout Collapsed
并且hide/show你的FAB基于appBarLayout的一些偏移或collapse/expand模式