Setting学习(一)-静态界面

Posted by DoubleWay on February 2, 2020

Setting学习(一)-静态界面

设置是整个android系统的重要应用,涉及的都是系统功能 Setting模块的主要路径 :/packages/apps/Settings/ Setting模块里的activity可能一看和其他的activity有不同,但是其实原理都是一样的,设置为了更好的区分和获取信息,在Androidmanifest.xml中添加了许多属性 从Androidmanifest.xml可以看到:

Settings有一个子类SubSettings.java 设置模块的主界面的Activity为 Settings

/packages/apps/Settings/src/com/android/settings/Settings.java

可以看到Settings的父类是SettingsActivity 内部也有许多继承SettingsActivity 的静态类内部类

\packages\apps\settings\src\com\android\settings\SubSettings.java

里面有两个方法,一个是向上导航另一个是判断是否为有效fragment

1. Settings和SubSettings都是空acticity,没有7大生命周期 2. 他们都继承自SettingsActivity ,就都要去调用SettingsActivity 的onCreate()方法 3. Settings主界面Activity使用的是Settings 4. Settings子界面Activity基本上都是使用SubSettings

SettingsActivity继承自SettingsDrawerActivity,而SettingsDrawerActivity是 在frameworks\base\packages\settingslib\src\com\android\settingslib\drawer中定义 ,SettingsDrawerActivity名称是沿用N版本的名字,但是侧滑栏功能在O版本上已经移除了 来看SettingsActivity的onCreate方法:

通过类名来判断加载布局,判断当前是Settings还是SubSettings来确定用什么布局来显示

如果是主界面的话加载settings_main_dashboard.xml

主要有两个fragment一个显示顶部的搜索栏,一个下面显示主要内容(一级菜单) 在之后的界面跳转即 launchSettingFragment(initialFragmentName, isSubSettings, intent)函数中又做出了区分:

第一次进入到主界面时mIsShowingDashboard是等于true的,所以会进入else 主界面使用DashboardSummary(Fragment)进行填充: 如果是子界面的话: 子界面则使用各自的Fragment,并设置各自的主题。

Settings的内部类的启动一般都是通过activity 中的action属性启动的,而判断的依据也是通过mIsShowingDashboard,加载得是settings_main_prefs.xml文件。 Settings的内部类的主体显示内容依然是一个Fragment,而这个Fragment已经在AndroidManifest.xml中定义好了. StorageDashboardActivity为例

里面有很多属性,这些属性是在SettingLib中的

/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java

有用到的 内部类StorageDashboardActivity的Fragment显示内容为: com.android.settings.FRAGMENT_CLASS,即com.android.settings.deviceinfo.StorageSettings