0

我正在尝试为 FAB 编写自定义行为。目前,当调用 CoordinatorLayout.Behavior 类中的 onNestedScroll() 方法时,我从这里获取的行为控制了 FAB 的可见性。

但是,onNestedScroll() 仅在 AppBarLayout 到达屏幕顶部时(即 AppBarLayout 已折叠时)检测向下滚动事件(即何时dyConsumed > 0)(注意: dyConsumed 是 onNestedScroll 的参数),并且 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;
    }

但是因为 onDependentViewChanged 每次在触摸事件后调用 FAB 依赖于该方法的视图过于频繁,所以一旦 FAB 变为不可见,我就无法再次使其可见。

简而言之,我的问题是:如何在不依赖 AppBarLayout 的滚动事件的情况下在 NestedScrollView 中切换 FAB 的可见性状态?

如果您需要更多代码,请告诉我,

提前致谢

4

1 回答 1

0

你应该使用:

AppBarLayout.OnOffsetChangedListener

这种方法:onOffsetChanged

onNestedScroll 只会检测与折叠/展开 AppBarLayout 无关的滚动事件。

在那里,您可以执行以下操作:

if(verticalScroll == 0)
   // appBarLayout Expanded
else if(verticalScroll == appBarLayout.totalScrollRange())
  // appBarLayout Collapsed

并根据 appBarLayout 的某些偏移或折叠/展开模式隐藏/显示您的 FAB

于 2016-04-03T23:08:15.630 回答