如果要自定义哪些目标被视为顶级目标,则可以将一组目标ID传递给构造函数,如下所示:
val appBarConfiguration = AppBarConfiguration(setOf(R.id.main, R.id.android))
###四 创建工具栏
要创建工具栏NavigationUI,首先在主活动中定义栏,如下所示:
接下来,setupWithNavController()
) 从您的主要活动的onCreate()
方法调用,如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
…
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
findViewById(R.id.toolbar)
.setupWithNavController(navController, appBarConfiguration)
}
#####注意:使用a时Toolbar,导航会自动处理“导航”按钮的单击事件,因此您无需覆盖onSupportNavigateUp()。
###包括CollapsingToolbarLayout
要CollapsingToolbarLayout在工具栏中添加a ,请先在主要活动中定义工具栏和周围布局,如下所示:
接下来,setupWithNavController() 从您的主要活动的onCreate方法调用,如下所示
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
…
val layout = findViewById(R.id.collapsing_toolbar_layout)
val toolbar = findViewById(R.id.toolbar)
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
layout.setupWithNavController(toolbar, navController, appBarConfiguration)
}
###四 行动吧
要使用默认操作栏包含导航支持,请setupActionBarWithNavController() 从主活动的onCreate()方法中调用 ,如下所示。请注意,您需要声明您的AppBarConfiguration外部onCreate(),因为您在覆盖时也使用它onSupportNavigateUp():
private lateinit var appBarConfiguration: AppBarConfiguration
…
override fun onCreate(savedInstanceState: Bundle?) {
…
val navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
接下来,覆盖onSupportNavigateUp()以处理向上导航:
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
###五 将目的地绑定到菜单项
NavigationUI还提供了将目标绑定到菜单驱动的UI组件的帮助程序。NavigationUI包含一个辅助方法,onNavDestinationSelected()它MenuItem与NavController托管关联目标的方法 一起使用 。如果id在的MenuItem比赛的id目标时,NavController可以然后导航到目的地。
作为一个例子,下面的XML片断定义一个菜单项,并具有共同的目的地id,details_page_fragment:
<?xml version="1.0" encoding="utf-8"?><navigation xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
xmlns:android=“http://schemas.android.com/apk/res/android”
… >
…
onCreateOptionsMenu()例如,如果您的菜单是通过活动添加的,则可以通过覆盖onOptionsItemSelected()要呼叫的活动来将菜单项与目的地相关联onNavDestinationSelected(),如下所示:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val navController = findNavController(R.id.nav_host)
return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}
现在,当用户单击details_page_fragment菜单项时,应用程序会自动导航到相应的目标位置id。
###六 添加导航抽屉
导航抽屉是一个UI面板,显示应用程序的主导航菜单。当用户触摸
应用栏中的抽屉图标或用户从屏幕的左边缘滑动手指时,抽屉出现 。
抽屉图标显示在使用a的所有顶级目标上DrawerLayout。顶级目标是应用程序的根级目标。它们不会在应用栏中显示“向上”按钮。
要添加导航抽屉,请先将a声明 DrawerLayout为根视图。在其中DrawerLayout,添加主UI内容的布局和包含导航抽屉内容的另一个视图。
例如,以下布局使用DrawerLayout带有两个子视图:a NavHostFragment用于包含主要内容,a NavigationView 用于包含 导航抽屉的内容。
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
android:id=“@+id/drawer_layout”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:fitsSystemWindows=“true”>
<android.support.design.widget.NavigationView
android:id=“@+id/nav_view”
android:layout_width=“wrap_content”
android:layout_height=“match_parent”
android:layout_gravity=“start”
android:fitsSystemWindows=“true” />
总结
**其实上面说了这么多,钱是永远赚不完的,在这个知识付费的时代,知识技能提升才是是根本!我作为一名8年的高级工程师,知识技能已经学习的差不多。**在看这篇文章的可能有刚刚入门,刚刚开始工作,或者大佬级人物。
像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
这么重要的事情说三遍啦!点赞+点赞+点赞!
【Android高级架构师系统学习资料】高级架构师进阶必备——设计思想解读开源框架
第一章、热修复设计
第二章、插件化框架设计
第三章、组件化框架设计
第四章、图片加载框架
第五章、网络访问框架设计
第六章、RXJava 响应式编程框架设计
第七章、IOC 架构设计
第八章、Android 架构组件 Jetpack
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
第七章、IOC 架构设计
第八章、Android 架构组件 Jetpack
[外链图片转存中…(img-MtUji3DX-1715186521107)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!