BottomNavigationView 在向上滚动而不是向下滚动时隐藏

BottomNavigationView hides when scrolling up instead of down

支持库 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>

此版本的 BottomNavigationView 缺少滚动行为,无法按照指南中的规定开箱即用。

wrote an article on what's missing and how you can fix it。这包括在 CoordinatorLayout 中实现 BottomNavigationView 的滚动行为。

我的解决方案是用此处的 NestedCoordinatorLayout 替换 FrameLayout and then add the BottomNavigationBehavior from Nikola's blog post https://medium.com/@nullthemall/bottomnavigationview-missing-pearls-eaa950f9ad4e#.p1i01wwui 这样您的底部导航行为就可以监听 NestedCoordinatorLayout

内片段的嵌套滚动

我相信您可以使用另一个实现 NestedScrollParent + NestedScrollChild 的视图来实现相同的行为。

一个简单的解决方案是向 appbarlayout 添加一个偏移侦听器。非常适合我。

所以像这样:

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