在ViewPager上滑动显示/隐藏FloatingActionButton

我有一个有3个选项卡的活动。 每个标签页都是一个显示RecyclerView的片段。 其中一个片段中有FloatingActionButton。 我在Fragment的布局中实现了这个Button。 我也在静态的片段的右下angular。

片段布局:

- CoordinatorLayout - RecyclerView - FAB (without any behavior) 

在Activity布局中,我有:

 - CoordinatorLayout - AppBarLayout - Toolbar - TabLayout (SmartTabLayout) - ViewPager 

现在的问题是当工具栏展开时,FAB是从视图中半隐藏的,但当工具栏折叠时完全显示。 虽然这不会发生,如果我在活动本身实现FABbutton。 但是我不想在所有的片段中都有这个button。 我只是把它放在第一个片段。

这是我用来解释这个更清楚的gif。

隐藏的Fab

活动布局的XML:

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/coordinatorLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbarLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:background="@color/color_primary" app:layout_scrollFlags="scroll|enterAlways" /> <com.ogaclejapan.smarttablayout.SmartTabLayout android:id="@+id/viewpagertab" android:layout_width="match_parent" android:layout_height="@dimen/tab_height" android:background="@color/color_primary" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> 

用于片段布局的XML:

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/coordinatorLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/card_list" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_plus_white_48dp" app:layout_anchor="@id/card_list" app:layout_anchorGravity="bottom|right|end" /> </android.support.design.widget.CoordinatorLayout> 

我的问题是我怎么做,以便在滚动回滚视图时button保持可见?

最好的select是将FloatingActionButton放在Activity中,然后在ViewPager.OnPageChangeListener调用show()hide() 。 这样你就可以得到很好的进入/退出animation ,符合材料devise指南 。

 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position == 0) { fabAdd.show(); } else { fabAdd.hide(); } } @Override public void onPageScrollStateChanged(int state) { } }); 

结果:

在这里输入图像说明

 app:layout_behavior="@string/appbar_scrolling_view_behavior" 

到RecyclerView也是如此。