Android Jetpack - Navigation Kotlin 默认生成详解

这里写自定义目录标题

创建

首先我们选择android studio默认生成的Navigation Drawer Activity
不管是新创建一个project还是新创建Activity都是一样的生成结果
创建界面
新项目不要勾选 use legacy libiraries, 除了一些老项目,使用这个会导致新功能无法使用
不要勾选
创建完成之后:
项目图

目录详解

自动创建的要比我们自己创建的要多出不少东西
一个一个来解释
先是mainActivity的layout
mainlayout
mainActivity layout中包含侧边栏和另一个layout,对应 app_bar_main ,侧边栏里又包含一个侧边栏头部对应nav_header_main
在这里插入图片描述

app_bar_main 里又包含 另一个layout content_main
标题栏和悬浮球也在里面

最后的content_main 里 包含我们的 导航宿主 NavHostFragment ,以一个fragment的形式存在
导航
回到activity_main 中
侧边栏样子:
在这里插入图片描述
上方绿色的是头部文件,由一个图片和两个textview组成
下方是一个menu文件
位置在
menu

你可以在该文件中添加group和item,
group的 checkableBehavior 属性为single时为单选
menu
我们已经将 menu navcontroller绑定到了一起

而在navigation中只要我们的navigation的 fragment id和对应菜单item的id相同 ,就能在点击item时跳转到相应的fragment
在这里插入图片描述
在这里插入图片描述

在MainActivity中 我们
通过 appBarConfiguration
加载菜单的id时
是为了在该 fragment 中,依然能打开左上角侧边栏

appbar第二种加载方式为
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)

val navView: BottomNavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navView.menu)

下图为点击效果 ,左上角依然可以点出菜单
ga
如果删除,左上角为返回键
a
想
注: 不论何时,你都可以通过 左滑 来呼出你的侧边栏
左、右滑动通过 DrawerLayout 的 gravity属性调配

在导航宿主里
app:defaultNavHost=“true”:让 Navigation 容器处理返回事件,在 Navigation 容器中如果有页面的跳转,点击返回按钮会先处理 容器中 Fragment 页面间的返回,处理完容器中的页面,再处理 Activity 页面的返回。如果值为 false 则直接处理 Activity 页面的返回。

app:navGraph:指定 Navigation 文件。

该导航宿主不可切换成 androidx.fragment.app.FragmentContainerView
会报错

同时 如果把宿主导航的 include 排在侧边栏 NavigationView 后面,会导致点击侧边栏菜单无效果

最后跳转的方式为 navController.navigate(R.id.fragment_to_fragment)等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值