Launcher简要分析:Launcher的功能实现
2012-05-30 17:02
302 查看
将所有的应用都排列在桌面上
将所有的应用都排列在桌面是通过首先创建一个三维的boolean型全局数组来记录item的排列情况,第一维是屏数,第二维是纵向上的排列情况,第三维是横向的排列情况,如果那个位置被item所占用就标记为1,否则标记为0.在启动时把全局数组初始化为0,然后在添加的时候把相应的位置置1.凡是涉及到workspace上item的变化,比如移动、添加、删除操作时都需要维护数组,保持数组的正确性,因为在安装新程序时依据数组的状态去判断把item加到什么位置。动态增加屏幕
动态增加屏幕是通过worksapce .addchild(view)的方式实现。基本思路是:首先预先规定所允许的最大的屏幕数,然后在需要增加屏幕而且当前屏幕数没有超过最大屏幕数的时候通过(CellLayout) mInflater.inflate ( R.layout.workspace_screen,null )创建一个celllayout实例出来,然后通过addchild把它加入进去。在屏幕上的item被删除时通过从最后一屏起判断屏幕上是否有item,如果有的话保留,没有的话则删除最后一屏,以此类推。预制桌面:添加普通的应用程序快捷方式
在../res/xml下的default_workspace.xml文件中加入默认要放置的普通的应用程序。加入的格式为:<favorite launcher:packageName="... " //应用的packageName launcher:className="... " //应用启动时的第一个activity launcher:screen="..." //放置在第几屏(放在workspace的时候需要,从0开始,0为第一屏,1为第二屏,以此类推...) launcher:x="..." //放置x方向的位置(在列中的位置) launcher:y="..." /> //放置y方向的位置(在行中的位置)
packageName和className可以通过点击程序,然后在打印出的log中找到comp={...},例如如下信息: comp={com.estrongs.android.taskmanager/com.estrongs.android.taskmanager.TaskManager}。其中com.estrongs.android.taskmanager为packageName, com.estrongs.android.taskmanager.TaskManager为className。
workspace的布局如下:
(0,0) (1,0) (2,0) (3,0) (4,0)
(0,1) (1,1) (2,1) (3,1) (4,1)
(0,2) (1,2) (2,2) (3,2) (4,2)
预制桌面:添加widget
在../package/apps/VLauncher/res/xml下的default_workspace.xml文件中加入默认要放置的普通的应用程序。加入的格式为:<widget launcher:packageName="..." //widget的packageName launcher:className=" ..." //实现 widget的 receiver 类的名称. launcher:container="..." //放置的位置(只能为desktop) launcher:screen="..." //放置在第几屏上 launcher:x="..." //放置的x位置 launcher:y="..." //放置的y位置 launcher:spanx="..." //在x方向上所占格数 launcher:spany="..."/> //在y方向上所占格数
例如,要在第3屏的第一行第二列放置开始放置一个x方向上占两个单位格,y方向上占两个单位格的时钟,可以加入以下代码:
<appwidget launcher:packageName="com.android.alarmclock" launcher:className="com.android.alarmclock.AnalogAppWidgetProvider" launcher:container="desktop" launcher:screen="2" launcher:x="1" launcher:y="0" launcher:spanx="2" launcher:spany="2"/>
改变主界面的排列方式
要修改桌面的排列方式,如下,先根据横竖屏设置修改workspace_screen.xml里shortAxisCells和longAxisCells的参数,然后在Launcher.java中修改NUMBER_CELLS_X和NUMBER_CELLS_Y的值,在2.3版本中刚开始往数据库中添加item的时候会去判断,如果不修改NUMBER_CELLS_X和NUMBER_CELLS_Y的话会导致一部分的item显示不出来,导致预制apk的失败。增加worksapce上的屏数
要增加屏数,首先在根据横竖屏在launcher.xml中的<com.android.launcher.Workspace 中删除或增加 <include android:id="@+id/cellN" layout="@layout/workspace_screen" />,然后在Launcher.java中修改SCREEN_COUNT的值即可。相关文章推荐
- Launcher简要分析:Launcher的功能实现
- 【学以致用】android功能实现6---android8.0 Launcher获取快捷方式源码分析(2)
- 【学以致用】android功能实现7---android8.0 Launcher获取快捷方式源码分析(3)
- 【学以致用】android功能实现5---android8.0 Launcher获取快捷方式源码分析(1)
- asp.net采用cookie+数据库方式实现购物车功能分析
- iOS 混合应用的关键点分析 - 仿 Android 平台 WebView 可注入本地对象方法的功能实现要点
- 带有HA功能的Hadoop Client端RPC实现原理与代码分析
- 【PHP开源产品】Ecshop的商品筛选功能实现分析之一(主要对category.php进行分析)
- thinkPHP5分页功能实现方法分析
- android Launcher3中定制第三方apk图标,实现类似主题功能
- 蔡军生先生第二人生的源码分析(4)Log调试功能的实现
- storage服务功能实现分析之一
- php实现自动获取生成文章主题关键词功能的深入分析
- Android功能总结:仿照Launcher的Workspace实现左右滑动切换
- 分析Android App中内置换肤功能的实现方式
- Launcher简要分析:Launcher的其他内容
- android 入门 (分析: 非匿名内部类 监听功能的实现)
- 文件上传那些事儿:多图上传、大文件上传、断点续传功能实现与分析
- [转]简要分析Ogre的渲染队列实现原理(二)
- 从P2DR2模型分析SOC需要实现的核心功能