Android Q Settings模块新特性梳理
1.代码结构差异
Android Q上Settings模块与之前P版本上的Settings模块最直观的差一点是代码结构上的差异。Q上将Settings中会使用到的特有的控件,会移动到SettingsLib下面,为每一种特有控件创建一个目录,并且创建android.bp文件,将widget编译成jar包文件,然后在SettingsLib的android.bp文件中引用这些jar包。比如:
LayoutPreference,SettingsSpinner,AppPreference等等
以LayoutPreference为例:其目录下有res, src,android.bp和AndroidManifest.xml文件,在Android.bp中定义编译完成后生成SettingsLibLayoutPreference
LayoutPreference中的android.bp文件,编译后会生成.jar
在SettingsLib中的android.bp文件中会使用到该jar文件,
其他的控件,包括SettingsSpinner,ProgressBar,SearchWidget,AppPerference等,也都是这样的结构。
2. 一级菜单加载方式差异
Android Q上Settings模块与之前P版本另一个较大差异点,在于主菜单加载方式的差异。Q上相当于在P的基础上,新增了一套加载逻辑,并且P上的加载逻辑还生效。
Android P上一级菜单加载流程:
通过PMS查询action为com.android.settings.action.SETTINGS,并且有meta-data携带有com.android.settings.category.ia.home的Activity组件,解析其数据(title,fragment,icon,等),
将其封装未Tile类型的数据,Tile是SettingsLib中定义的数据结构类,并将其存储在对应的DashboardCategory集合中.S