Jas*_*dge 6 navigation android android-actionbar navigation-drawer android-jetpack
当使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在此处看到的,此方法具有以下基本逻辑:
如果你不在navgraph的起始目的地,那么按钮是一个后退按钮,否则它是一个汉堡包按钮
这意味着只有起始目的地可以通过操作栏按钮打开绘图菜单,而所有其他目的地都有后退按钮,并且必须滑动才能打开绘图菜单.
为什么会这样?这似乎是android团队有意识的设计决定.在多个目的地有一个汉堡包按钮是不是不赞成吗?
我想有几个主要的分支,有一个汉堡包菜单和所有屏幕分支的那些有一个后退按钮.有没有办法实现多个NavGraphs并将它们连接在一起NavigationView?
u_u
NavigationUI我报告了在bug 109868820中使用片段内的工具栏和帮助程序时遇到的问题。
帮助我的 Google 员工明确指出(文章#7):
[...] 与材料设计团队的讨论明确表明,导航抽屉是一种全局导航模式,应该随处可用
因此,材质设计抽屉必须在每个屏幕上可用,包括当导航按钮是“向上”箭头(而不是汉堡包)时更深的屏幕。在这种情况下,抽屉只能通过滑动手势使用,因为导航按钮在应用程序堆栈中向上导航。
确实(bug 中的#4):
您仍然可以从导航图中的 android:label 获得标题集,并在涉及向上按钮时获得正确的行为(如果您使用的是 DrawerLayout 版本,这一点尤其重要)
因此,您在源代码中找到的行为确实是“正确的”行为。
因此:
换句话说,汉堡包按钮只能在顶级目的地上使用。
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |