实现方式两种
1.从头到尾写一个apk然后把系统的属性加上去,然后启动的时候默认就指定到这个apk的包名,他就启动,
2.我们基于Androidlauncher3的源码去做一个定制化的修改
分析一下这两种的区别,
自定义,要有丰富的Android开发经验,并且要对自定义控件比较熟悉 对事件分发处理一定要非常的熟悉,
quickstep是快捷启动源码,核心源码在src里面,
allapps 是默认从底部划上来
应用通知,默认应用,把主屏幕应用换一下
pixel是原生启动器,默认桌面,往上滑,所有的应用都出现了,
allapps目录就是这个👆
search就是上面的搜索框,anim动画,badge桌面小图标,小圆点提示之类的东西,compat兼容低版本兼容,config一些配置 dragndrop就是核心的处理他的拖拽逻辑
folder桌面文件夹,两个应用拖拽在一起
graphics主要是一些图片处理 keyboard是日志,model 模型类 notification通知
pageindicators页面滑动指示器,popup弹窗
provider广播
shortcuts快捷方式 是否把你的apk添加到桌面?
states 状态改变,
touch触摸
util工具类 views自定义view widget在launcher是非常注重的,微键就是widget
长按会弹出popup 核心最难的就是widget
其他这些东西都是某文件夹 itenm launcher
这个是android p 9.0.0_r61的源码,
第一件事找到他的AndrodNan1feSt,Xml
BackupAgent是一个备份的一个代理是继承Context的一个父类,不是继承applacation 这和我们普通app开发是有区别的 因为这里面有一个备份的一个代理,就是他可以...context 备份 数据存储,比较复杂,
onrestore恢复的时候,
onRestoreFinished备份的时候,恢复完成的时候,他就调用这个东西👇
activity有两个👇
settingactivity其实就是他的设置,做app开发一般是用不到的
有一些通知 桌面图标
还有一些fragment 还有一些参数传递之类的,动画呀等等,就是有些数据的存储 他是放在这个里面的 关于launcher的默认设置是在settingactivity里面,所以这个也不是重点
真正的重点是launcheractivity 启动模式是singleTask 是单一任务栈模式 是activity的一个启动模式,比如说是否弹出键盘,是否全屏,
这个里面加了也就是说你加了这些之后,他就可以识别到你是一个launcher的一个入口,就起这个作用
然后最核心的 launcher继承BaseBragginghrtivits 他是一个可以滑动的activity 允许支持拖拽,
BaseActivity实现了UserEventDclegate订阅的 UserEventDclegate他是用户事件,就是它可以处理任务事件的监听 主要做监听的一个东西
1.是一个activity 2.他具有滑动的属性,
布局👆
跟布局是LaUIncherRootView
最核心的有DragLayer WorkspacePa8eIndicator 然后下面是一个指示器👇
all_apps其实就是这个底部了,
hotseat就是下面的这一块 ,五个图标👇
如果想把指示器换掉,我们只需要把这一块代码换成我们自定义控件就可以
DragLayer就是一个拖拽的一个图层,继承BaseDragLayer 又继承Insettab1eFrameLayout 也就是说他可以承载很多子布局的,
Workspace其实就是我们整个桌面的一个容器,他能够承载 从状态栏下面,一直到虚拟按键下面,这么高的范围都是他的Workspace
DragLayer里面使用了DragController ,就是专门为拖拽定义了一个接口