Launcher源码阅读
对系统launcher2源码进行走读
乌啼夜的酒痕
Android车载系统攻城狮
展开
-
【Launcher延伸】窗口小部件Widget及时钟实例
前言 App Widget意为应用程序窗口小部件,可作为AppWidgetHostView(内部根据RemoteViews进行了重现)出现在其它应用程序(该程序中使用AppWidgetHost管理)中,作为其视图的一部分展示。且系统会定期发出自动更新信息更新Widget,当然,用户也可使用AppWidgetManager手动进行更新。Widget作为交互的一部分可满足应用在后台时占据...原创 2018-07-05 10:54:27 · 1754 阅读 · 0 评论 -
【Launcher小知识点】home按键监听
在Android中我们没法通过onKeyEvent监听到home按键监听事件,而Launcher中当我们进入到all apps页面候点击home按键则需要返回到Workspace中,这又是如何做到的呢。有以下三种方式。其中前两者其它应用也可参照使用,第三种只对Launcher管用。原创 2018-06-28 10:38:43 · 1643 阅读 · 2 评论 -
【Launcher开发】壁纸选择
在拖拽分析(上)一文中我们分析了WorkSpace长按事件监听位于Launcher.java的onLongClick方法中,其中WorkSpace会在onInterceptTouchEvent方法对TouchDown事件的位置进行判断,并使用setTag方法保存点击位置所在的cellInfo,如果cellInfo中的cell变量不为空则说明当前长按的是快捷图标,需进入startDrag进行拖拽;如果cell变量为空则说明长按处没有控件,进入壁纸选择的逻辑中,当时我们一语带过,没有深究。今天这篇文章则原创 2018-06-26 21:59:24 · 594 阅读 · 0 评论 -
【Launcher开发】数据库分析
前言 在Launcher项目中,WorkSpace及HotSeat的所有图标如ShortcutInfo、Folder、Widget等都需要用到持久化技术以根据用户喜好排列这些图标,并能在下次打开时很方便的找到目标应用或功能。Android持久化技术分为文件存储、SharedPreferences、数据库存储,这几种数据存储方式也各有优劣,文件储存一般用于存储图片、网络请求数据等文本数据或二进...原创 2018-06-24 23:07:50 · 1149 阅读 · 0 评论 -
【Launcher开发】拖拽过程分析(下)
上一篇中笔者分析了从WorkSpace的addInScreen方法中添加长按监听事件,到DragLayer拦截TouchEvent自己处理直到其TouchUp事件的drop方法流程。本篇则着重分析当打开文件夹时文件夹内部的拖拽以及从All Apps页面长按应用图标拖拽到WorkSpace页面的过程。 文件夹时从WorkSpace的bindItems方法中添加到WorkSpace中的:...原创 2018-06-17 17:07:07 · 551 阅读 · 0 评论 -
【Launcher开发】拖拽过程分析(上)
不知你是否还记得桌面布局分析一文中的launcher.xml布局文件中根布局下嵌套的一个看似没啥用的DragLayer布局,它既不像Workspace那样作为PagedView容器占据大半江山,也不似HotSeat那样别有洞天。如果仅以布局的层面看,它更像是冗余存在。但它作为包裹布局,却实在有深层次的意义,今天我们就一起来揭下其神秘面纱。 我们知道,在安卓桌面长按某个应用图标时可以拖拽进...原创 2018-06-15 22:34:42 · 771 阅读 · 0 评论 -
【Launcher小知识点】拖拽过程中的排序
在DragView的拖拽过程中,会查找拖拽中心mDragViewVisualCenter最近的Cell位置,并根据Cell位置上是否已经被应用图标控件占据,分为两种情况。 1.没有被应用图标占据,那么则进入拖拽轮廓的显示。原创 2018-06-14 23:30:45 · 719 阅读 · 0 评论 -
【Launcher小知识点】拖拽轮廓的显示
在DragView的拖拽过程即onDragOver中,会不断的进行判断距离当前DragView中心点mDragViewVisualCenter最近的Cell以及两者的distance。如果发现最近的Cell位置没有被占用,那么就会在Cell位置画一个拖拽的轮廓。 在CellLayout的成员变量中声明了以下几组变量: private Rect[] mDragOutlines =...原创 2018-06-13 22:46:01 · 474 阅读 · 0 评论 -
【Launcher开发】启动流程分析
要了解Android桌面是如何启动的,我们有必要先从进程孵化器Zygote进程谈起,Zygote作为系统启动的第一个java进程,是所有其他java层进程的父进程,它依靠fork系统调用孵化出其它进程,可以大大减少各进程初始化环境的时间,而我们的SystemServer进程就是这样孵化出来的。下面是frameworks\base\core\java\com\android\internal...原创 2018-06-09 16:02:25 · 410 阅读 · 0 评论 -
【Launcher开发】Android桌面布局分析
安卓桌面主要由Launcher和SystemUI组成。SystemUI负责可下拉状态栏、导航栏、锁屏页面的显示;Launcher则作为桌面的主要部分,负责各应用与Widget的排列与增删,其布局可占到整个桌面的90%以上。所以我们有必要先从布局层面开始了解其构成。 从AndroidManifest.xml文件可以知道,Launcher.java是应用的主Activity,其布局也正是...原创 2018-06-09 00:08:09 · 4912 阅读 · 0 评论