Launcher3 的布局和结构

(系列文章点这里)

首先你需要去 这里 下载下Launcher3的源码。这个是我从android源码里面拿出来的,修改删掉了一些东西,方便在eclipse上运行,你可以直接在手机上运行,有了代码和apk再来看说明,心理会很踏实的。

Launcher3其实最主要的是一个Activity,基本上所有的操作都集中在这个Activity上,在Launcher.java 当中,setContentView的参数是R.layout.launcher,我们暂时只研究下桌面竖屏的情况,相关源码在res/layout-port/launcher.xml。

请左手拿着你运行着launcher3的手机,右手打开launcher.xml,布局的最外面是一个FrameLayout,紧紧地包围了一个叫DragLayer的ViewGroup,他继承自FrameLayout,主要功能就是处理拖拽事件,当你在拖拽一个图标的时候,就是一个view放到了DragLayer里面,跟随你的手在移动。

下面在你的手机屏幕上左右滑,有好几屏,这个能滑的东西叫做Workspace,在布局文件里面可以看到的,Workspace能算是Launcher3代码里代码量前三的吧,他的父类的父类是PagedView,一个用来处理左右滑动的ViewGroup。那么Workspace里面可以滑动的单独一屏叫什么呢? 布局文件里面似乎没有写,其实是CellLayout,他负责的是图标和小部件的显示和整齐摆放。

接下来看你在滑动屏幕的时候看见下方有个指示器,告诉你桌面现在有几屏,当前是在哪一屏上。这个东西叫做PageIndicator,从名字就可以看出意义了。还有最下面的4个固定不动的图标,和中间一个Button显示所有应用,这整个叫做Hotseat,用来放置比较常用的应用,比如拨号,短信,相机等等。

屏幕最上方有个搜索框,在我们拖动图标的时候,这个搜索框会替换成“删除”,整个这部分叫做SearchDropTargetBar。长按桌面空白区域的时候会进入一个界面,这里可以对屏幕进行换序操作,下面有三个按钮“壁纸”,“小部件”和“设置”,这个在布局文件里的id为overview_panel。接下来还有几个为cling结尾的子布局,这些是桌面第一次启动时候的帮助界面,告诉你怎么点击怎么用。

最后哈有两个东西我暂时还没有搞懂,ScrimView和DrawableStateProxyView,如果有人知道的话,留个言哈~

一图胜千言:

桌面基本结构

关于 “Launcher3 的布局和结构” 的 44 个意见

  1. 你好 请问是在哪里工作?我在北京某知名IT公司工作,最近要招人做launcher,希望有机会能跟你聊聊,QQ二九④④87o5

  2. Launcher3中的横屏的删除图标怎么出不来是怎么回事啊?、

  3. 博主大人.千辛万苦,找到你这个文章,小弟只想问,我想更改Workspace大小,让CellLayout变成5X4 布局,让顶部的删除框默认收起,长安图标时在出现。我应该怎么修改!跪求指点!

      1. 我看了这个方法,Launcher.getQsbBar返回的是null,我编译运行的时候就是一个默认不出现搜索框的界面,如何让他默认出现呢?求解,楼主

  4. 错误提示,已经安装了,必须卸载才可以,我怀疑是跟安卓官方的包名冲突了,然后我 把包名改了,还是这样。大神,可以说一下你的扣扣号吗?我的893417690,真心的想拜你为师,好好学学launcher方面的知识

  5. 大神,早安!我想在launcher3中添加自己的widget,是把视线widget的代码写在launcher3源码里面呢,还是?大神能不能给我讲一下流程?谢谢大神了!

  6. DrawableStateProxyView这个控件找到了这样一句解释This is the search bar voice button proxy view. It allows us to have a larger touch target than the microphone constrained by the search bar bounds.具体怎么使用不太清楚

  7. 下载了AS的版本,修改了包名和android:authorities属性就成功跑在了android6.0上面,敢问博主一个问题,我想给每个屏都使用不同的背景壁纸如何下手呢?

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注