对比原生Launcher2,分析cyanogenmod中的Trebuchet的设置实现方式。
下载cyanogenmod源码及编译方法
http://wiki.cyanogenmod.org/w/Build_for_grouper#Install_the_repo_command
在settings显示Launcher设置
如果设置Trebuchet为默认启动器,就可以在cm的settings里看到设置Trebuchet的选项。
在Trebuchet的mainifest中,对应设置的activity添加了:
1
|
|
通过搜索,在 /packages/apps/Settings/src/com/android/settings/settings.java
中,在 updateHeaderList
方法中添加了对此category的判断(代码省略)。
同时,在res/xml/settings_headers.xml中的适合位置,添加了以下header:
1 2 3 |
|
修改Cell宽高以适应数目变化
之后在Trebuchet的设置界面,监听设置变化。用户更改设置,使用sharedpreference中的一个数值记录设置是否变化。
在Launcher.java的onResume方法中判断这个值是否变化,如果变化,则使用以下代码重启,同时设此值为false:
1 2 3 |
|
在Workspace.java中,判断如果有用户设置就读取用户设置,并设置LauncherModel的静态变量sWorkspaceCellCountX、sWorkspaceCellCountY。
在CellLayout的构造函数中,添加了下面的关键代码
:
1 2 3 4 5 6 |
|
这段代码前的mCellWidth、mCellHeight直接读取自res。
其中default_cell_count_x是在res里定义的默认数目。mCountX、mCountY来自LauncherModel,然后就算出了适应的mCellWidth
和mCellHeight
。
简单抄袭了下,确实可以设置数目了,显示也正常。不过hotset和folder中的间距也收到影响,待继续研究。。。