【问题标题】:BottomNavigationView does not show up when auto hide/show is enabled启用自动隐藏/显示后,BottomNavigationView 不显示
【发布时间】:2020-09-13 18:19:02
【问题描述】:

我有一个 Activity,其布局中有一个 BottomNavigationView

<androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/nav_host"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />


        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
            app:menu="@menu/menu_home_bottom_navigation"
            />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

我的bottom_avigation 用片段更改nav_host FragmentContainerView。所有这些片段都有NestedScrollViewRecyclerView,并且由于app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior",我的bottom_navigation 自动隐藏/显示在scrollDown/scrollUp。

我看到了这个问题:Hide/Show bottomNavigationView on Scroll 。我目前正在使用 Abhishek Singh 给出的答案,但问题不是这个。

这是我的问题:想象一下 FragAFragB 都有 RecyclerViewsFragA 的项目较少,导致所有项目都适合屏幕且不可滚动。现在,当我从FragA 切换到FragB 然后向下滚动时,bottom_navigation 会以动画形式隐藏,如果我按下后退按钮,我将看不到bottom_navigation,因为FragA 不可滚动,我无法通过滚动使其可见.

我也在FragAonResume 事件中尝试了bottom_navigation.visibility = View.Visible,但仍然无法正常工作。我认为它以某种方式将bottom_navigation 翻译到底部,因此这段代码没有帮助。

那么我该如何解决这个问题呢?

【问题讨论】:

标签: android material-design android-animation bottomnavigationview


【解决方案1】:

由于您的代码在这里没有任何部分,我的解决方案是在后退按钮上收听:

也许你可以看看这篇文章会有所帮助

Android: onBackPressed() for Fragments

然后更改 BottomNavigationView 的可见性。

【讨论】:

  • 谢谢,但我说过我尝试过那个解决方案。可见性更改不起作用
【解决方案2】:

我找到了答案。我没有更改bottom_navigationvisibility 属性,而是在BottomNavigationView 上编写了两个扩展函数来隐藏/显示它:

private fun BottomNavigationView.showUp() {
    animate().setDuration(200L).translationY(0f).withStartAction { visibility = View.VISIBLE }.start()
}

private fun BottomNavigationView.hideDown() {
    animate().setDuration(200L).translationY(height.toFloat()).withEndAction { visibility = View.GONE }.start()
}

现在在onResumeFragA 我有这个:

override onResume() {
    super.onResume()
    bottom_navigation.showUp()
}

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多