问题描述
我只有一个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上自动隐藏/显示。
我看到了这个问题:Hide/Show bottomNavigationView on Scroll 。我目前正在使用 Abhishek Singh 给出的答案,但问题不在于此。
这是我的问题:想象FragA
和FragB
都有RecyclerViews
,但是FragA
的项目较少,导致所有项目都适合屏幕且不可滚动。现在,当我从FragA
切换到FragB
然后向下滚动时,bottom_navigation
会隐藏起来,并显示动画,如果按返回按钮,我将不再看到bottom_navigation
,因为FragA
无法滚动,无法通过滚动使其可见。
我还在bottom_navigation.visibility = View.Visible
FragA
事件中尝试过onResume
,但仍然无法正常工作。我认为它以某种方式将bottom_navigation
转换为底部,因此该代码无济于事。
那我该如何解决这个问题?
解决方法
由于您的代码中没有任何内容,因此我的解决方案是监听后退按钮:
也许您可以查看这篇文章会有所帮助
Android: onBackPressed() for Fragments
然后更改BottomNavigationView的可见性。
,我找到了答案。我没有更改visibility
的{{1}}属性,而是在bottom_navigation
上写了两个扩展函数来隐藏/显示它:
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()
}
的{{1}}中,我有这个:
onResume