Android Settings开发总结
目录1.界面构成1.1 主界面2. 事件响应2.1 界面切换2.2 监听SettingProvider字段变化3.搜索栏4.常用调试技巧5.其它子模块5.1应用与通知Open卸载等的控制与显示6.默认值更新1.界面构成主界面使用的layout是settings_main_dashboard子界面使用的layout是settings_main_prefs。主界面使用DashboardSummary(Fragment)进行填充RecyclerView子界面都是使用各自的Fragment进行填充。settings_main_dashboard中只有一个FrameLayout后面会将其替换为DashboardSummary。settings_main_prefs中也存在一个叫main_content的FrameLayout后面会将其替换为各自的Fragment。界面渲染可参考Android O Settings源码流程分析界面渲染篇1.1 主界面RecyclerView用DashboardAdapter填充数据。里面包括setConditionssetSuggestionssetCategory。一级界面数据加载机制一级菜单对应TopLevelSettings.java布局文件top_level_settings.xml二级菜单是动态加载和静态xml布局文件 preferenceScreen, PreferenceController中控制数据更新。1.2 默认数据Android Settings 的默认数据初始化主要由SettingsProvider负责。当设备首次开机或恢复出厂设置时系统会创建settings.db数据库Android6之后存放于 /data/system/users/0/settings_*.xml并通过DatabaseHelper.java读取 framework 层和 vendor 层的 XML 默认值写入数据库的system、secure和global表中。2. 事件响应2.1 界面切换1.当点击主界面上的item时会调用Utils.startWithFragment方法2.在Utils.startWithFragment会跳转至SubSettings,对应的fragment也作为参数传递给了SubSettings3.SubSettings是一个空的activity但SubSettings继承于SettingsActivity因此会调用父类SettingsActivity的onCreate方法4.在onCreate方法中className为SubSettingsisSubSettings为truemIsShowingDashboard为false5.因此会执行switchToFragment(initialFragmentName, initialArguments, true, false, mInitialTitleResId, mInitialTitle, false);6.通过switchToFragment将settings_main_prefs的main_content替换为了子界面对应的fragment2.2 监听SettingProvider字段变化可用registerContentObserver 监听指定key对应值变化。3.搜索栏搜索栏在settings_main_dashboard.xml 中的search_bar布局文件为search_edittext.xml对应SearchActivitySearchFragment用RecyclerView来显示搜索项。实现原理参考Settings搜索栏实现原理settings:searchablefalse可配置单个的preference 不支持搜索4.常用调试技巧针对Fragement类型子界面可用 adb logcat -s SubSettings 轻松查看进入了哪个界面。5.其它子模块5.1应用与通知Open卸载等的控制与显示AppInfoDashboardFragment----(instant_app_buttons 打开那一栏)----launch 按钮----(InstantAppButtonsPreferenceController.java 控制打开按钮显示否, 点击事件在AppButtonsPreferenceController 里面的refreshUi控制界面刷新)锁屏见 SystemUI StatusBar状态栏部分功能记录6.默认值更新在OTA时更改默认值需要修改SettingsProvider的版本号SETTINGS_VERSIONAndroid13 通过OTA升级更新系统默认设置_android13 ota升级-CSDN博客