Когда пользователь не проходит аутентификацию, он переходит к фрагменту логина, если он аутентифицируется, он переходит к домашнему фрагменту. Когда неаутентифицированный пользователь открывает приложение, bottomNavView должен быть скрыт, но он оставляет пустое пространство.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigationController = findNavController(R.id.nav_host_fragment)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_nav)
findNavController(R.id.nav_host_fragment).addOnNavigatedListener { _, destination ->
when (destination.id) {
R.id.register1Fragment -> hideBottomNavigation()
R.id.register2Fragment -> hideBottomNavigation()
R.id.loginFragment -> hideBottomNavigation()
else -> showBottomNavigation()
}
}
NavigationUI.setupWithNavController(bottomNavigationView, navigationController)
// Sets up the Toolbar actions (like Back Button) to be managed by the Navigation Component
NavigationUI.setupActionBarWithNavController(this, navigationController)
}
private fun hideBottomNavigation() {
// bottom_navigation is BottomNavigationView
with(bottom_nav) {
if (visibility == View.VISIBLE) {
visibility = View.INVISIBLE
}
}
}
private fun showBottomNavigation() {
// bottom_navigation is BottomNavigationView
with(bottom_nav) {
visibility = View.VISIBLE
}
}
override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
}
Вот XML для основной деятельности. Это показывает, как реализован bottomNavView. Корневой viewGroup является ConstraintLayout, высота и ширина установлены в match_parent. Мне было трудно понять, где настоящая проблема.
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_navigation_graph"
app:defaultNavHost="true"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/bottom_nav"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
style="@style/Widget.MaterialComponents.BottomNavigationView.Colored"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:labelVisibilityMode="unlabeled"
android:background="@color/colorPrimary"
app:itemBackground="@color/bottom_nav_state"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/menu_bottom_nav" />