Launcher3 的布局和结构

于 2014年03月21日 发布在 android开发 跳到评论

(系列文章点这里)

首先你需要去 这里 下载下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,如果有人知道的话,留个言哈~

一图胜千言:

桌面基本结构

本文共有 43条评论 | 沙发:文章评论

  1. 蜗牛说道:

    thx,图片画得很清晰

  2. 斑斑那片林说道:

    您好~谢谢您的源代码,请问怎么处理 eclipse中编译时找不到 com.mediatek.*等库的问题呢,谢谢

  3. miss wang说道:

    分析的好好

  4. 王利超说道:

    大神求加QQ,有问题想要咨询

  5. 寻求launcher开发人才说道:

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

  6. 无敌小包哥说道:

    最近公司也打算做一个launcher项目, 这个对我的帮助太大了,非常感谢

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

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

  8. shufu说道:

    长按桌面空白区域的时候会进入一个界面, 这个界面的大小怎么确定?

  9. cindy说道:

    您好,我想请教一下,横屏的时候,如何把Hotseat移到底部,现在是横屏的时候在右边

  10. 付玉强说道:

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

  11. 付玉强说道:

    博主,你知道怎么只屏蔽掉主页的搜索框而不屏蔽掉长按的删除框效果,,,,

  12. oyy说道:

    我是前来顶帖子的.写的通俗易懂.谢了.

  13. yayax说道:

    博主,下的您的代码中launcher.xml没有cling结尾的子布局呀?

  14. Bryant说道:

    lz 威武,分析的棒棒滴!

  15. Bryant说道:

    lz 威武,分析的棒棒滴! :mrgreen:

  16. Tim说道:

    楼主请教您一个问题,桌面的图标可以合并成文件夹这是怎么做的?

  17. Tim说道:

    大神,麻烦问一下,Android studio 版本的launcher3在5.0以上的版本上安装不了,这个问题怎么解决的?

  18. Tim说道:

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

  19. Tim说道:

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

  20. Tim说道:

    大神帮帮我啊,我实在是没办法了。。。。

  21. Tim说道:

    我要自定义一个widget,用户刚打开launcher软件,这个widget就要出现在预制的地方,该怎么做啊?

  22. hegd说道:

    看了几篇博主的博客,讲的不错,学习中。

  23. hegd说道:

    看了博主的博客,博主牛逼,博主向你学习。

  24. 张鹤说道:

    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.具体怎么使用不太清楚

  25. 小草在成长说道:

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

  26. 名字说道:

    这一系列的文章都是基于android4.4的launcher吗?

留下评论!

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)