0

Я внедрил ViewPager и FloatingActionButton в пределах CoordinatorLayout. У FloatingActionButton есть layout_behavior, установленный на заказ ScrollAwareFABBehavior. На пейджере пейджера Fab изменяет видимость (анимацию) успешно, а также при прокрутке вложенных представлений. Я реализовал все необходимые библиотеки поддержки (23.3.0).Предотвращение FloatingActionButton становится видимым внутри CoordinatorLayout, ViewPager, Fragment

Пейджер показывает 2 Fragments:

  1. RecyclerView (должны показать ФАБ)
  2. NestedScrollView (не должно быть ФАБ)

Об изменении страниц, активность просит ребенка фрагментов (интерфейс), чтобы показать fab или нет. Это отлично работает, но при прокрутке вниз прокрутки в 2-м фрагменте, панель снова видна.

Как предотвратить показ fab снова при прокрутке вниз NestedScrollView?

+0

вы можете добавить FloatingActionButton только к 1-му фрагменту вместо активности или скрыть его вручную при запуске 2-го фрагмента – arjunkn

+0

, если я добавлю его на первый фрагмент, он соскальзывает с помощью слайдов viewpager. это не то, о чем говорится в инструкциях: Fab должен оставаться в том же положении, что и при просмотре просмотров ViewPager! – silversmurf

ответ

0

Хорошо, у меня есть ответ от пользователя G + (кредиты Кристофе Бейлсу)!

Получение CoordinatorLayout.Behavior экземпляра на основной деятельности (или основной фрагмент):

В 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 вы можете установить для каждого фрагмента если фабрика должна быть видимой или нет.

Возможно, это поможет любому человеку с той же проблемой !!

Смежные вопросы