Почему андроид джетпак NavigationUI метод navigateUp открывает меню рисования только в том случае, если вы находитесь в начальной точке назначения графика навигации - PullRequest
0 голосов
/ 18 мая 2018

При использовании 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

1 Ответ

0 голосов
/ 09 июня 2018

Я сообщил о проблеме, возникшей при использовании панели инструментов внутри фрагмента и помощника NavigationUI в ошибке 109868820 .

Гуглер, который мне помог, четко указал (статья #7):

[...] обсуждения с группой разработчиков материалов дали понять, что блок навигации - это глобальный шаблон навигации, который должен быть доступен везде

Таким образом, панель дизайна материала должна быть доступна на каждом экране, включая более глубокие, когда навигационная кнопка - это стрелка «вверх» (не гамбургер).В этом случае ящик доступен только жестом смахивания, поскольку навигационная кнопка перемещается вверх в стеке приложения.

Действительно (# 4 в ошибке):

You 'Вы по-прежнему будете получать набор заголовков с метки android: на графике навигации и правильное поведение, когда дело доходит до кнопки «Вверх» (особенно важно, если вы используете версии DrawerLayout)

Так что поведение, котороевы обнаружили в источнике действительно "правильное" поведение.

Следовательно:

  • пункт назначения верхнего уровня: ящик, открываемый с помощью кнопки смахивания и гамбургера
  • не верхУровень получателя: ящик открывается только с помощью пролистывания, кнопка перемещается вверх (без гамбургера)

Другими словами, кнопку гамбургера следует использовать только на пунктах верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...