Я последовал руководству от android .developers и внедрил navigation component
в свое приложение. Я столкнулся с проблемой, когда мне нужно, чтобы некоторые экраны были с панелью инструментов / нижней панелью навигации или без нее.
Android пример макета разработчика
<androidx.appcompat.widget.Toolbar
.../>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
.../>
принудительно меня чтобы скрыть / показать панель инструментов / bottomNavBar в OnDestinationChanged
обратном вызове в MainActivity:
navController.addOnDestinationChangedListener { _, destination, _ ->
when (destination) {
R.id.topLevelDestination-> {
toolbar.visibility = View.GONE
bottomNav.visibility = View.VISIBLE
}
R.id.lowLevelDestination -> {
toolbar.visibility = View.VISIBLE
bottomNav.visibility = View.GONE
}
И, конечно, если я сделаю это так, у меня изменится размер макета до того, как я увижу новый фрагмент. Я имею в виду, что я вижу, как исчезает нижняя навигация на фрагменте A, и я вижу части фрагмента B в том месте, где была bottomNavBar, когда фрагмент A все еще находится на экране, и после этого фрагмента появляется B.
Как решить Это? Нужны ли мне вложенные навигационные графы?
Обновление
: Добавлен гиф с проблемой
введите описание изображения здесь
Описание видео: это вырезанная часть моего экрана. На видео вы можете увидеть пользовательский интерфейс системы, нижнюю панель навигации и основной фрагмент с кнопкой. Когда я нажимаю кнопку, навигационный график перемещает меня к пункту назначения без нижней панели навигации. Итак, я делаю bottomNavBar.hide (), когда OnDestinationChanged. Как видите, bottomNavBar исчезает ДО того, как я нахожусь на самом деле, и вы можете видеть часть моего целевого фрагмента, видимого после того, как исчезнет bottomnavBar. Вот в чем проблема.