如有错误欢迎指正
在创建activity的时候选择样式BottomNavigationBar
创建之后的目录结构大致如下
我们来说一下逻辑概念吧,MainActivity是主活动,主活动下方有三个导航按钮,分别对应着3个片段,和活动类似,每个fragment.xml文件都需要一个Java类控制,但是这里采用ViewModel模式,所以会多一个model类,用来存放数据。
然后我们来看一下mainactivity的代码
首先要了解的是binding,这种用法叫view-binding,代替findviewbyid,创建一个对象存储布局中的所有具有id的组件,在class中用到组件的时候就调用binding对象
具体用法可以看官方文档视图绑定 | Android 开发者 | Android Developers (google.cn)
再看mainactivity,在创建完binding之后用BottomNavigationView创建一个对象,并通过findviewbyid得到布局中的导航组件。
下面的几个语句AppBarConfiguration,NavController,NavigationUI.setupActionBarWithNavController,NavigationUI.setupWithNavController,都是实现导航功能的基本语句,具体用法看官方文档
使用 NavigationUI 更新界面组件 | Android 开发者 | Android Developers (google.cn)
我们现在看一下activity_main.xml的代码
<com.google.android.material.bottomnavigation.BottomNavigationView/>对应这底部导航,导航中有哪些选项,是由 app:menu="@menu/bottom_nav_menu" 决定的,那我们看一下menu里面是什么
这里面的第二个和第三个item被我改过了,改了图标和名字,换成了网易云音乐和QQ音乐
我们再看fragment标签,主要看最后一行app:navGraph="@navigation/mobile_navigation",打开mobile_navigation.xml看一下
这里指出三个选项对应的三个fragment,我们想在页面添加内容的话就需要去对应的fragment中修改内容即可
每个fragment.xml都需要有Java类来控制,这里用到了viewmodel模式,一个fragment.xml对应一个控制类和一个数据类,比如HomeFragment是控制类,HomeViewModel是数据类。具体用法可以参考官方文档ViewModel 概览 | Android 开发者 | Android Developers (google.cn)