Launcher3 总结

来源:互联网 发布:淘宝小零食 知乎 编辑:程序博客网 时间:2024/05/23 12:38

今年6月开始,公司开始涉及到Android平板开发,需要定制自己的桌面,开始学习Launcher3源码,在此基础上做修改。Launcher3代码是Android4.4中桌面代码。我的理解是,Launcher3其实也是一个APP,但是相较于其他APP,他在手机启动后将会被启动,并且能够读取其他APP数据,放出其他APP入口,并且能够调用Android系统自带的其他程序。


我主要负责定制UI界面,只显示指定的APP,并确定APP图标在Launcher上的位置。


看了Launcher3代码后,发这部分逻辑主要在在两个类以及一个xml中实现,分别是LauncherAppsConpatV16.java、LauncherAppsConpatVL.java 与 default_workspace_5*6.xml。


default_workspace_5*6.xml在Launcher3第一次启动的时候调用,定义了桌面的默认布局。在非定制机中,这个文件里面暴露的接口一般仅仅是系统自带APP,比如设置、照相机、图库等等。在我们的代码中,主要是文件夹folder和APP的图标favourite。

    <favorite        launcher:packageName=""        launcher:className=""        launcher:screen="2"        launcher:x="2"        launcher:y="0"/>
favorite是直接现实在桌面上的APP图标。packageName是包名,className是启动时的类名,screen是该图标需要位于第几屏,x是图标的横坐标,y是图标的纵坐标。

    <folder        launcher:title="@string/folder_name_chines"        launcher:screen="2"        launcher:x="0"        launcher:y="0">        <favorite            launcher:packageName=""            launcher:className="" />        <favorite            launcher:packageName=""            launcher:className="" />        <favorite            launcher:packageName=""            launcher:className="" />    </folder>

一个flolder标签就是一个文件夹,title是文件夹的名字,screen是该文件夹位于第几屏,x是在该屏幕上的横坐标,y是在该屏幕上的纵坐标,都是从0开始。其中的favorite就是该文件夹中需要现实APP图标,需要填写APP的包名和启动时的类名,但是不需要写screen、x、y等,在该文件夹中将按照顺序现实这几个图标。


LauncherAppsConpatV16.java 与 LauncherAppsConpatVL.java中的getActivityList方法将返回手机中所有APP的信息,在每一次Launcher启动时都将会调用,但这两个方法中只有一个会被调用,这和设备相关,具体的调用原则并没有查询。在LauncherAppsConpatV16.java 中通过APP的包名来限制只暴露哪些APP,LauncherAppsConpatVL.java中通过APP启动时的类名来限制出现哪些APP。这两个方法最后返回的list都是最终将会在桌面上显示的APP信息的list。


在LauncherModel.java中,对返回的APP list进行了排序。

Collections.sort(apps,                        new LauncherModel.ShortcutNameComparator(mLabelCache));

如果不需要的话,直接可以将这部分代码去掉。可以在上面提到的两个类的getActivityList方法中,让返回的list是你需要的顺序就好。

0 0