BottomAppBar与FloatingActionButton滚动行为异常问题求助
我之前也碰到过一模一样的情况:BottomAppBar滚动时能正常收起来,但FAB就只轻微下移一点,完全不同步。其实问题出在FAB的滚动配置和锚定逻辑上,给你几个靠谱的解决思路:
思路1:移除FAB自身的layout_scrollFlags
你的FAB是锚定在BottomAppBar上的,它的滚动行为应该完全依赖于Bar,不需要自己设置layout_scrollFlags。原来的代码里给FAB加了scroll|enterAlways,反而会让它的滚动逻辑和Bar冲突,导致不同步。直接删掉这个属性就行。
修改后的FAB代码:
<com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" app:backgroundTint="#FFFF0000" app:layout_anchor="@id/bar" app:rippleColor="#FFFF8888" app:srcCompat="@drawable/ic_fab_search" />
思路2:确保滚动View的Behavior配置正确
滚动事件能传递给BottomAppBar,前提是你的滚动容器(比如RecyclerView、NestedScrollView)设置了正确的Behavior。一定要给滚动View加上app:layout_behavior="@string/appbar_scrolling_view_behavior",这样滚动时系统才会通知BottomAppBar执行隐藏/显示操作,锚定在Bar上的FAB自然就跟着一起动了。
示例(以RecyclerView为例):
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
思路3:给FAB绑定滚动行为(备选方案)
如果上面两种方法都没生效,可以尝试给FAB直接设置HideBottomViewOnScrollBehavior,强制它跟随滚动隐藏:
<com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" app:backgroundTint="#FFFF0000" app:layout_anchor="@id/bar" app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior" app:rippleColor="#FFFF8888" app:srcCompat="@drawable/ic_fab_search" />
不过这个方案一般是当FAB没有锚定在Bar上时用的,优先试试前两种方法更稳妥。
按照上面的步骤调整后,FAB应该就能和BottomAppBar同步滚动隐藏了~
内容的提问来源于stack exchange,提问作者Waza_Be
相关产品推荐
相关产品推荐

