首页 > 解决方案 > 隐藏子屏幕/片段的android底部导航视图

问题描述

我正在尝试创建一个单一活动的 Android 应用程序。我有带有 BottomNavigationView、三个顶级片段和一些子片段的 MainActivity(仅活动)。我的要求是每当屏幕显示顶级片段时,底部导航应该是可见的,以便可以进行切换。但是当我查看任何子片段时,应该隐藏底部导航。是否有使用 Navigation 组件的开箱即用方式或需要手动更改可见性?

标签: androidandroid-fragmentskotlinandroid-bottom-nav-viewandroid-architecture-navigation

解决方案


更新(导航组件 1.0)

Navigation 组件 1.0.0-alpha08 开始,方法addOnNavigatedListener(controller: NavController, destination: NavDestination)更改为addOnDestinationChangedListener(controller: NavController, destination: NavDestination, arguments: Bundle). 它的行为也略有改变(如果目标参数改变,它也会被调用)。

旧答案

您可以使用 NavController.OnNavigatedListener 来实现此行为(在 Activity onCreate 中设置):

findNavController(R.id.container).addOnNavigatedListener { _, destination ->
    when (destination.id) {
        R.id.dashboardFragment -> showBottomNavigation()
        else -> hideBottomNavigation()
    }
}

private fun hideBottomNavigation() {
    // bottom_navigation is BottomNavigationView
    with(bottom_navigation) {
        if (visibility == View.VISIBLE && alpha == 1f) {
            animate()
                    .alpha(0f)
                    .withEndAction { visibility = View.GONE }
                    .duration = EXIT_DURATION
        }
    }
}

private fun showBottomNavigation() {
    // bottom_navigation is BottomNavigationView
    with(bottom_navigation) {
        visibility = View.VISIBLE
        animate()
                .alpha(1f)
                .duration = ENTER_DURATION
    }
}

推荐阅读