При использовании NavigationView
с DrawLayout
и ActionBar
, jetpack
предоставляет несколько мощных удобных методов, позволяющих объединить все вместе для упрощения реализации этих элементов.
МетодsetupActionBarWithNavController
, предоставляемый в библиотеке NavigationUi
, представляет собой метод расширения для действий, который добавляет кнопку гамбургера, чтобы открыть ваш ящик, и если вы переопределите метод onSupportNavigateUp:Boolean
в своей деятельности, чтобы вызвать метод navigateUp(drawLayout:DrawLayout, navController:NavController)
, этот метод изменит гамбургер.кнопку к кнопке «Назад» и автоматически назад с причудливой анимацией, которая очень крутая.
Однако кажется, что этот метод реализован следующим образом:
public static boolean navigateUp(@Nullable DrawerLayout drawerLayout,
@NonNull NavController navController) {
if (drawerLayout != null && navController.getCurrentDestination().getId()
== navController.getGraph().getStartDestination()) {
drawerLayout.openDrawer(GravityCompat.START);
return true;
} else {
return navController.navigateUp();
}
}
Как вы можете видеть здесь,этот метод имеет базовую логику:
, если вы не находитесь в пункте назначения начала навигационного графа, то кнопка является кнопкой возврата, в противном случае это кнопка гамбургера
Это означает, что только начальный пункт назначения может открыть меню рисования с помощью кнопки панели действий, в то время как все остальные пункты назначения имеют кнопку возврата,Чтобы открыть меню рисования, нужно провести пальцем.
Почему это так?Кажется, это сознательное дизайнерское решение команды Android.Не одобряется ли наличие кнопки гамбургера в нескольких местах назначения?
Мне бы хотелось иметь несколько основных веток, в которых есть меню гамбургеров, и все экраны, на которых ветвятся те, у которых есть кнопка «Назад».Есть ли способ реализовать несколько NavGraphs
и связать их вместе в один NavigationView
?
u_u