今年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是直接现实在桌面上的APP图标。packageName是包名,className是启动时的类名,screen是该图标需要位于第几屏,x是图标的横坐标,y是图标的纵坐标。

                                

一个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是你需要的顺序就好。

更多相关文章

  1. (二) RIL 层分析
  2. Android注解-编译时生成代码 (APT)
  3. android studio 新建assets 文件
  4. 旋屏时,OnCreate方法重复调用的解决
  5. Android中抓取手机视频流数据
  6. 介绍MVP Model-View-Presenter在Android中的应用
  7. android studio下,JNI和NDK的简单编程
  8. 初识 Android(安卓)Native Development Kit (NDK)
  9. Android(安卓)事件分发源码分析

随机推荐

  1. Android解析XML-详尽
  2. Android(安卓)的Camera架构介绍
  3. Android(安卓)Socket 与 IOS Socket
  4. android知识小点:文字阴影效果
  5. Android(安卓)Layout xml 中的几个概念
  6. Android(安卓)插件安装 和MyEclipse的Win
  7. 【Android自助餐】Handler消息机制完全解
  8. Android(安卓)学习
  9. 构建Android的交叉编译器、用NDK编译移植
  10. Android(安卓)Manifest标签之manifest,me