6

当使用 aNavigationView和 aDrawLayoutActionBarjetpack提供了一些强大的便捷方法来将所有内容连接在一起,以便这些项目更容易实现。

setupActionBarWithNavController库中提供的方法是 ActivityNavigationUi的扩展方法,它添加了一个汉堡按钮来打开抽屉,如果您onSupportNavigateUp:Boolean在 Activity 上覆盖该方法以调用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

4

1 回答 1

1

我报告了在片段内使用工具栏和错误 109868820NavigationUI中的帮助程序时遇到的问题。

帮助我的 Google 员工明确指出(第 7 条):

[...] 与材料设计团队的讨论清楚地表明,导航抽屉是一种全球导航模式,应该随处可用

所以材料设计抽屉必须在每个屏幕上都可用,包括当导航按钮是“向上”箭头(而不是汉堡包)时更深的那些。在这种情况下,抽屉只能通过滑动手势使用,因为导航按钮在应用程序堆栈中向上导航。

确实(错误中的#4):

您仍然可以从导航图中的 android:label 中获得标题集,以及向上按钮的正确行为(如果您使用的是 DrawerLayout 版本,这一点尤其重要)

因此,您在源代码中找到的行为确实是“正确的”行为。

因此:

  • 顶级目的地:通过滑动和汉堡按钮打开的抽屉
  • 非顶级目的地:仅通过滑动打开抽屉,按钮向上导航(无汉堡)

换句话说,汉堡按钮应该只用于顶级目的地。

于 2018-06-09T12:51:59.430 回答