Setting学习(一)-静态界面
设置是整个android系统的重要应用,涉及的都是系统功能 Setting模块的主要路径 :/packages/apps/Settings/ Setting模块里的activity可能一看和其他的activity有不同,但是其实原理都是一样的,设置为了更好的区分和获取信息,在Androidmanifest.xml中添加了许多属性 从Androidmanifest.xml可以看到:
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.1.png)
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.3.png)
Settings有一个子类SubSettings.java 设置模块的主界面的Activity为 Settings
/packages/apps/Settings/src/com/android/settings/Settings.java![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.5.png)
可以看到Settings的父类是SettingsActivity 内部也有许多继承SettingsActivity 的静态类内部类
\packages\apps\settings\src\com\android\settings\SubSettings.java![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.7.png)
里面有两个方法,一个是向上导航另一个是判断是否为有效fragment
1. Settings和SubSettings都是空acticity,没有7大生命周期 2. 他们都继承自SettingsActivity ,就都要去调用SettingsActivity 的onCreate()方法 3. Settings主界面Activity使用的是Settings 4. Settings子界面Activity基本上都是使用SubSettingsSettingsActivity继承自SettingsDrawerActivity,而SettingsDrawerActivity是 在frameworks\base\packages\settingslib\src\com\android\settingslib\drawer中定义 ,SettingsDrawerActivity名称是沿用N版本的名字,但是侧滑栏功能在O版本上已经移除了 来看SettingsActivity的onCreate方法:
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.9.png)
通过类名来判断加载布局,判断当前是Settings还是SubSettings来确定用什么布局来显示
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.11.png)
如果是主界面的话加载settings_main_dashboard.xml
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.13.png)
主要有两个fragment一个显示顶部的搜索栏,一个下面显示主要内容(一级菜单) 在之后的界面跳转即 launchSettingFragment(initialFragmentName, isSubSettings, intent)函数中又做出了区分:
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.15.png)
第一次进入到主界面时mIsShowingDashboard是等于true的,所以会进入else 主界面使用DashboardSummary(Fragment)进行填充: 如果是子界面的话: 子界面则使用各自的Fragment,并设置各自的主题。
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.17.png)
Settings的内部类的启动一般都是通过activity 中的action属性启动的,而判断的依据也是通过mIsShowingDashboard,加载得是settings_main_prefs.xml文件。 Settings的内部类的主体显示内容依然是一个Fragment,而这个Fragment已经在AndroidManifest.xml中定义好了. StorageDashboardActivity为例
![](/img/2020-02-02/Setting学习-静态界面/2020-02-02-1.19.png)
里面有很多属性,这些属性是在SettingLib中的
/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java有用到的 内部类StorageDashboardActivity的Fragment显示内容为: com.android.settings.FRAGMENT_CLASS,即com.android.settings.deviceinfo.StorageSettings