在Android开发的学习过程中,发现有很多的xml配置文件,目前所见的比较常用且容易混淆的有:nav_graph.xml、activity_main.xml、content_main.xml,下面做一些简单的区分:
- 首先关于这些文件所在的目录,它们同属于res资源包下的不同目录,nav_graph.xml是在navigation包中,而activity_main.xml和content_main.xml同在layout布局包中,从这里可以发现,后两者属于一类xml文件
- 那么什么是Navigation?它可以看作是Google对于之前Fragment某些方面的不满,重新搭建的一套管理Fragment的框架,且管理起来比较简单,但它将来又不一定仅限于导航Fragment
- 再仔细观察nav_graph.xml的代码可以发现,它含有两对<fragment></fragment>标签,对应app中的两个碎片(页面)并包含它们的action即行为来实现页面的跳转
- 而activity_main.xml这个文件的名字就很熟悉,在MainActivity.java文件中出现了ActivityMainBinding这一由视图绑定自动生成的类,它的命名就来自activity_main.xml这一文件名,而MainActivity.java这一文件主要用于设计应用程序主框架及其功能(也就是在任何页面都会显示的控件及其功能),activity_main.xml文件中也有在该类出现的Toolbar和fab的定义
因此可以认为该xml文件主要用于实现app主体框架的设计和相关功能
- 最后来看content_main.xml,发现它只有一个在MainActivity.java中被通过id引用的fragment---
nav_host_fragment_content_main:
该语句用于实现导航功能,到这里似乎还对这一xml文件的功能有点模糊,再看activity_main.xml文件中的一条语句:
也就是说activity_main.xml包含了content_main.xml,因此可以认为后者是用于除主体框架外的其他视图和功能设计,两者在一定程度上可以认为是同一个文件拆分成两个......
总的来说,nav_graph.xml文件主要用于声明碎片(页面)及其跳转,activity_main.xml文件包含(引用)了content_main.xml文件,前者主要用于程序主体框架的设计(比如菜单栏、出现于所有页面的控件等),后者主要用于其他的视图和控件设计(比如导航等)