启用自动 hide/show 时 BottomNavigationView 不显示
BottomNavigationView does not show up when auto hide/show is enabled
我有一个 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
。所有这些片段都有 NestedScrollView
或 RecyclerView
,并且由于 app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
,我的 bottom_navigation
在 scrollDown/scrollUp 上自动 hides/shows。
我看到了这个问题:Hide/Show bottomNavigationView on Scroll
。我目前正在使用 Abhishek Singh 给出的答案,但问题不在于此。
这是我的问题:想象一下 FragA
和 FragB
都有 RecyclerViews
但 FragA
的项目较少导致所有项目都适合屏幕并且不可滚动。现在,当我从 FragA
切换到 FragB
然后向下滚动时,bottom_navigation
会隐藏动画,如果我按下后退按钮,我就再也看不到 bottom_navigation
了,因为 FragA
不可滚动我无法通过滚动使其可见。
我也在 FragA
onResume
事件中尝试了 bottom_navigation.visibility = View.Visible
,但仍然无效。我认为它以某种方式将 bottom_navigation
翻译到底部,因此这段代码没有帮助。
那么我该如何解决这个问题?
由于此处没有您的代码,我的解决方案是监听后退按钮:
也许你可以查看这篇文章,它会有所帮助
Android: onBackPressed() for Fragments
并且更改了 BottomNavigationView 的可见性。
我找到了答案。我没有更改 bottom_navigation
的 visibility
属性,而是在 BottomNavigationView
上为 hiding/showing 编写了两个扩展函数:
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()
}
现在 FragA
的 onResume
我有这个:
override onResume() {
super.onResume()
bottom_navigation.showUp()
}
我有一个 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
。所有这些片段都有 NestedScrollView
或 RecyclerView
,并且由于 app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
,我的 bottom_navigation
在 scrollDown/scrollUp 上自动 hides/shows。
我看到了这个问题:Hide/Show bottomNavigationView on Scroll 。我目前正在使用 Abhishek Singh 给出的答案,但问题不在于此。
这是我的问题:想象一下 FragA
和 FragB
都有 RecyclerViews
但 FragA
的项目较少导致所有项目都适合屏幕并且不可滚动。现在,当我从 FragA
切换到 FragB
然后向下滚动时,bottom_navigation
会隐藏动画,如果我按下后退按钮,我就再也看不到 bottom_navigation
了,因为 FragA
不可滚动我无法通过滚动使其可见。
我也在 FragA
onResume
事件中尝试了 bottom_navigation.visibility = View.Visible
,但仍然无效。我认为它以某种方式将 bottom_navigation
翻译到底部,因此这段代码没有帮助。
那么我该如何解决这个问题?
由于此处没有您的代码,我的解决方案是监听后退按钮:
也许你可以查看这篇文章,它会有所帮助
Android: onBackPressed() for Fragments
并且更改了 BottomNavigationView 的可见性。
我找到了答案。我没有更改 bottom_navigation
的 visibility
属性,而是在 BottomNavigationView
上为 hiding/showing 编写了两个扩展函数:
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()
}
现在 FragA
的 onResume
我有这个:
override onResume() {
super.onResume()
bottom_navigation.showUp()
}