Android 更改所选选项卡时显示底部导航视图(隐藏底部视图上的滚动行为)

Android 更改所选选项卡时显示底部导航视图(隐藏底部视图上的滚动行为),android,Android,我有一个BottomNavigationView,如果向上滚动,它会在隐藏状态下向下滚动。现在,如果我按下back键,前面的片段没有任何滚动,我的BottomNavigationView仍然隐藏,有没有办法强制它可见 <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/my_nav_bar" android:layout_width="match_parent

我有一个BottomNavigationView,如果向上滚动,它会在隐藏状态下向下滚动。现在,如果我按下back键,前面的片段没有任何滚动,我的BottomNavigationView仍然隐藏,有没有办法强制它可见

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/my_nav_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="?android:attr/windowBackground"
    app:labelVisibilityMode="labeled"
    app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
    app:menu="@menu/navigation" />

如果您还没有弄明白,或者其他人也有同样的问题,我就是这样设法解决的:

在具有底部导航视图并承载片段的活动中,添加以下方法:

private fun forceShowNavBar() {
    if (my_nav_bar.translationY != 0f) {
        val layoutParams = my_nav_bar.layoutParams as CoordinatorLayout.LayoutParams
        val behavior = layoutParams.behavior as HideBottomViewOnScrollBehavior

        behavior.onNestedScroll(main_container, bottom_navigation_view, frag_ct, 0, -1, 0, 0, 0)
    }
}
如果不清楚在
onNestedScroll
中应该包含哪些参数,您可以阅读文档

然后,用以下内容覆盖您的
onBackPressed
方法:

override fun onBackPressed() {
    if (supportFragmentManager.backStackEntryCount > 0) {
        resetScreenState()
    }
    super.onBackPressed()
}

super.onBackPressed()
之前调用方法很重要,否则底部导航栏将不会显示。

如果您还没有弄清楚,或者其他人也有同样的问题,我就是这样解决的:

在具有底部导航视图并承载片段的活动中,添加以下方法:

private fun forceShowNavBar() {
    if (my_nav_bar.translationY != 0f) {
        val layoutParams = my_nav_bar.layoutParams as CoordinatorLayout.LayoutParams
        val behavior = layoutParams.behavior as HideBottomViewOnScrollBehavior

        behavior.onNestedScroll(main_container, bottom_navigation_view, frag_ct, 0, -1, 0, 0, 0)
    }
}
如果不清楚在
onNestedScroll
中应该包含哪些参数,您可以阅读文档

然后,用以下内容覆盖您的
onBackPressed
方法:

override fun onBackPressed() {
    if (supportFragmentManager.backStackEntryCount > 0) {
        resetScreenState()
    }
    super.onBackPressed()
}
super.onBackPressed()
之前调用方法非常重要,否则将不会显示底部导航栏