(系列文章点这里)
首先你需要去 这里 下载下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,如果有人知道的话,留个言哈~
一图胜千言:
thx,图片画得很清晰
您好~谢谢您的源代码,请问怎么处理 eclipse中编译时找不到 com.mediatek.*等库的问题呢,谢谢
咦,这些库是哪里来的?
分析的好好
大神求加QQ,有问题想要咨询
你要么直接给我邮件吧, 在“关于我”里面有
你好 请问是在哪里工作?我在北京某知名IT公司工作,最近要招人做launcher,希望有机会能跟你聊聊,QQ二九④④87o5
最近公司也打算做一个launcher项目, 这个对我的帮助太大了,非常感谢
最近我又开始接着写了, 谢谢关注
Launcher3中的横屏的删除图标怎么出不来是怎么回事啊?、
我也遇到这样的情况了,请问你解决了吗
长按桌面空白区域的时候会进入一个界面, 这个界面的大小怎么确定?
你是说缩小的Workspace的大小么?
您好,我想请教一下,横屏的时候,如何把Hotseat移到底部,现在是横屏的时候在右边
DeviceProfile的layout方法,里面有hotseat的布局参数的设置。不过改这一个地方可能不够,需要慢慢调
您好!我最近也在改这个,兄弟你找到解决办法没有?
博主大人.千辛万苦,找到你这个文章,小弟只想问,我想更改Workspace大小,让CellLayout变成5X4 布局,让顶部的删除框默认收起,长安图标时在出现。我应该怎么修改!跪求指点!
更改celllayout大小,需要在DynamicGrid和DeviceProfile两个类中寻找控制布局的代码。
删除框不是默认收起的么现在?
非常感谢你,可以全屏显示了!!!
博主,你知道怎么只屏蔽掉主页的搜索框而不屏蔽掉长按的删除框效果,,,,
SearchDropTargetBar 里面包含了搜索框和删除框,搜索框是在Launcher.getQsbBar中加到屏幕中的
我看了这个方法,Launcher.getQsbBar返回的是null,我编译运行的时候就是一个默认不出现搜索框的界面,如何让他默认出现呢?求解,楼主
我是前来顶帖子的.写的通俗易懂.谢了.
博主,下的您的代码中launcher.xml没有cling结尾的子布局呀?
lz 威武,分析的棒棒滴!
lz 威武,分析的棒棒滴!
楼主请教您一个问题,桌面的图标可以合并成文件夹这是怎么做的?
可以看看Workspace.onDragOver方法,其中调用了Workspace.manageFolderFeedback方法,你研究研究
谢谢,楼主大神,我研究研究,楼主大神,周末愉快!
大神,麻烦问一下,Android studio 版本的launcher3在5.0以上的版本上安装不了,这个问题怎么解决的?
有什么错误提示?
错误提示,已经安装了,必须卸载才可以,我怀疑是跟安卓官方的包名冲突了,然后我 把包名改了,还是这样。大神,可以说一下你的扣扣号吗?我的893417690,真心的想拜你为师,好好学学launcher方面的知识
有问题的话直接在这里留言吧,方便帮助更多的人
大神,早安!我想在launcher3中添加自己的widget,是把视线widget的代码写在launcher3源码里面呢,还是?大神能不能给我讲一下流程?谢谢大神了!
添加自己的widget?你是要自定一个View添加上去么?还是实现的App Widget?
大神帮帮我啊,我实在是没办法了。。。。
我要自定义一个widget,用户刚打开launcher软件,这个widget就要出现在预制的地方,该怎么做啊?
看了几篇博主的博客,讲的不错,学习中。
看了博主的博客,博主牛逼,博主向你学习。
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.具体怎么使用不太清楚
下载了AS的版本,修改了包名和android:authorities属性就成功跑在了android6.0上面,敢问博主一个问题,我想给每个屏都使用不同的背景壁纸如何下手呢?
这一系列的文章都是基于android4.4的launcher吗?
好难
自己做的小部件,怎么在launcher3里面的小部件里面找不到,网易新闻的小部件都可以找到在里面?