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填充数据。

里面包括setConditions,setSuggestions,setCategory。

一级界面数据加载机制一级菜单

对应TopLevelSettings.java,布局文件:

top_level_settings.xml

二级菜单是动态加载和静态xml布局文件, preferenceScreen, PreferenceController中控制数据更新。

默认数据来源于SettingProvicer.

2. 事件响应

2.1 界面切换

1.当点击主界面上的item时会调用Utils.startWithFragment方法
2.在Utils.startWithFragment会跳转至SubSettings,对应的fragment也作为参数传递给了SubSettings
3.SubSettings是一个空的activity,但SubSettings继承于SettingsActivity,因此会调用父类SettingsActivity的onCreate方法
4.在onCreate方法中,className为SubSettings,isSubSettings为true,mIsShowingDashboard为false
5.因此会执行switchToFragment(initialFragmentName, initialArguments, true, false, mInitialTitleResId, mInitialTitle, false);
6.通过switchToFragment将settings_main_prefs的main_content替换为了子界面对应的fragment

2.2 监听SettingProvider字段变化

可用registerContentObserver 监听指定key对应值变化。

3.搜索栏

搜索栏在settings_main_dashboard.xml 中的search_bar,布局文件为search_edittext.xml,对应SearchActivity,SearchFragment,用RecyclerView来显示搜索项。

实现原理参考:Settings搜索栏实现原理

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_VERSION)

Android13 通过OTA升级更新系统默认设置_android13 ota升级-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值