Предотвратить FloatingActionButton стал видимым в CoordinatorLayout, ViewPager, Fragment
Я реализовал ViewPager
и FloatingActionButton
в пределах CoordinatorLayout
, FloatingActionButton
иметь layout_behavior
установить пользовательский ScrollAwareFABBehavior. При перелистывании пейджера, fab успешно изменяет видимость (анимацию), а также при прокрутке вложенных видов. Я реализовал все необходимые библиотеки поддержки (23.3.0).
Пейджер показывает 2 Fragments
:
RecyclerView
(должен показать потрясающий)NestedScrollView
(не должен показывать потрясающий)
При смене страницы действие запрашивает дочерние фрагменты (интерфейс), показывать или нет. Это прекрасно работает, но при прокрутке вниз по представлению прокрутки во втором фрагменте, потрясающий снова виден.
Как предотвратить отображение fab снова при прокрутке вниз NestedScrollView?
1 ответ
Хорошо, я получил ответ от пользователя G+ (кредиты Кристофу Бэйлсу)!
Получение экземпляра CoordinatorLayout.Behavior для основного действия (или основного фрагмента):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
CoordinatorLayout rootView = (CoordinatorLayout) inflater.inflate(R.layout.main, container, false);
FloatingActionButton fab = (FloatingActionButton) mRootView.findViewById(R.id.fab);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
CoordinatorLayout.Behavior b = lp.getBehavior();
if (b instanceof ScrollAwareFABBehavior) { // my custom behavior
// saving ref for later use
mFABBehavior = (ScrollAwareFABBehavior) b;
}
// do other stuff
return rootView;
}
В ScrollAwareFABBehavior.java добавьте:
public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
private boolean mFabUserHidden = false;
// other stuff in here
/**
* Overrides the default FAB show/hide functionality
*
* @param hidden TRUE to stay hidden, false otherwise
*/
public void stayHidden(boolean hidden) {
mFabUserHidden = hidden;
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed > 0 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) {
animateOut(child);
} else if (dyConsumed < 0 && !mFabUserHidden && child.getVisibility() != View.VISIBLE) {
animateIn(child);
}
}
// do other stuff
}
В ViewPager.OnPageChangeListener
Вы можете установить для каждого фрагмента, если Фаб должен быть видимым или нет.
Может быть, это поможет кому-то с той же проблемой!