Launcher简要分析:Launcher的功能实现

来源:互联网 发布:淘宝客服链接代码 编辑:程序博客网 时间:2024/05/16 06:56
将所有的应用都排列在桌面上

将所有的应用都排列在桌面是通过首先创建一个三维的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文件中加入默认要放置的普通的应用程序。加入的格式为:

<favoritelauncher: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文件中加入默认要放置的普通的应用程序。加入的格式为:

<widgetlauncher:packageName="..."       //widget的packageNamelauncher:className=" ..."       //实现 widget的 receiver 类的名称.     launcher:container="..."        //放置的位置(只能为desktop)        launcher:screen="..."        //放置在第几屏上        launcher:x="..."              //放置的x位置        launcher:y="..."              //放置的y位置        launcher:spanx="..."         //在x方向上所占格数        launcher:spany="..."/>       //在y方向上所占格数

例如,要在第3屏的第一行第二列放置开始放置一个x方向上占两个单位格,y方向上占两个单位格的时钟,可以加入以下代码:

<appwidgetlauncher: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的值即可。