2

Новый BottomNavigationView из библиотеки поддержки v25.0.0 должен скрываться при прокрутке вниз, чтобы увидеть все элементы из списка. Однако, в моем сценарии тестирования, просмотр скрывается при прокрутке вверх. Любые идеи, что может вызвать это обратное поведение?BottomNavigationView скрывается при прокрутке вниз, а не вниз

inner_fragment настроен как фрагмент, вставленный внутри activity_main_framelayout_content Framelayout. макеты XML ниже:

main_activity.xml:

<android.support.design.widget.CoordinatorLayout 
     android:id="@+id/activity_main_coordinatorlayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
      android:id="@+id/activity_main_appbarlayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
       android:id="@+id/activity_main_toolbar" 
       android:layout_height="?attr/actionBarSize" 
       android:layout_width="match_parent" 
       android:background="?attr/colorPrimary" 
       app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:layout_scrollFlags="scroll|enterAlways"> 

      <include layout="@layout/activity_main_spinner_layout"/> 
     </android.support.v7.widget.Toolbar> 
    </android.support.design.widget.AppBarLayout> 

    <FrameLayout 
      android:id="@+id/activity_main_framelayout_content" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      android:fitsSystemWindows="true"/> 
</android.support.design.widget.CoordinatorLayout> 

<android.support.design.widget.NavigationView 
     android:id="@+id/activity_main_framelayout_navigation_drawer" 
     android:layout_width="@dimen/drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     android:background="@color/color_black_700"/> 

inner_fragment.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

    <FrameLayout 
      android:id="@+id/inner_fragment_framelayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

    <android.support.design.widget.BottomNavigationView 
      android:id="@+id/inner_fragment_bottom_navigation_view" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      app:menu="@menu/inner_fragment" 
      app:itemBackground="@drawable/bg_bottom_navigation" 
      app:itemIconTint="@color/ic_bottom_navigation" 
      app:itemTextColor="@color/ic_bottom_navigation"/> 
</FrameLayout> 
+0

Вы должны поставить BottomNavigationView как прямой потомок CoordinatorLayout. Также из моей попытки, я думаю, что поведение не поддерживается прямо сейчас для BottomNavigationView, или вы должны реализовать свое собственное поведение. – Srijith

+0

Поведение явно работает, даже если оно не является прямым ребенком, поскольку оно не будет прокручиваться вообще, если это не так. Даже NestedScrollview, которые не являются прямыми детьми CoordinatorLayout, по-прежнему работают безупречно, поэтому я не думаю, что это проблема. –

+0

Нет, это не приложение поддержки: layout_scrollFlags = "scroll | enterAlways" –

ответ

9

Этот выпуск В BottomNavigationView отсутствует прокрутка, чтобы работать из коробки, как указано в руководящих принципах.

I wrote an article on what's missing and how you can fix it. Это включает в себя выполнение поведения прокрутки BottomNavigationView в КоординаторLayout.

+0

Похоже, что не имеет никакого эффекта. Имейте в виду, что весь внутренний фрагмент содержится внутри FrameLayout с помощью appbar_scrolling_view_behavior. –

+0

Вы делаете что-то неправильно. Просмотреть, что поведение должно быть прямым потомком 'CoordinatorLayout'. –

+1

Хорошо, да, но в этом случае он содержится внутри фрагмента, который может быть заменен другими фрагментами внутри основного действия. Таким образом, это не может эффективно работать с текущей структурой навигации ... Однако как вы объясните, что поведение по умолчанию работает без каких-либо изменений для BottomNavigationView? Конечно, наоборот, по сравнению с панелью инструментов, но все же. ЛЕ: Я могу подтвердить, что использование этого в качестве прямого ребенка в CoordinatorLayout работает. –

0

Мое решение было заменить FrameLayout с NestedCoordinatorLayout здесь https://stackoverflow.com/a/37660246/2233621, а затем добавить BottomNavigationBehavior из блоге Николы https://medium.com/@nullthemall/bottomnavigationview-missing-pearls-eaa950f9ad4e#.p1i01wwui таким образом ваше Дно поведение навигации можно прослушивать вложенной прокруткой фрагмента внутри NestedCoordinatorLayout

Я считаю, вы можете использовать другое представление, которое реализует NestedScrollParent + NestedScrollChild для такого же поведения.

2

Простым решением является просто добавить прослушиватель смещения в appbarlayout. Прекрасно подходит для меня.

Так что-то вроде этого:

((AppBarLayout)toolbar.getParent()).addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { 
    @Override 
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
     mNavigationBar.setTranslationY(verticalOffset*-1); 
    } 
});