Launcher3--初识Launcher3

一、Launcher简介
    Launcher时开机完成后第一个启动的应用,用来展示应用列表和快捷方式、小部件等。Launcher作为第一个(开机后第一个启动的应用)展示给用户的应用程序,其设计的好坏影响到用户的体验,甚至影响用户购机的判断。所以很多品牌厂商都会不遗余力的对Launcher进行深度定制,如小米的MIUI、华为的EMUI等。Android默认的Launcher没有过多的定制,更加简洁,受到源生党的追捧,Google的Nexus系列手机基本都是用的源生Launcher,目前Android源生的Launcher版本是Launcher3,后面的相关内容也都是已Launcher3为基础。
    本篇就先来了解Launcher3的界面和功能。

二、界面和功能
   Launcher3是分两层显示的,第一层就是开机启动和用户按Home键后显示的页面(桌面),第二层是用来展示系统中所有需要显示到Launcher上的应用(我们常说的抽屉)。当然,并非所有的Launcher都有两层结构,比如小米Launcher就只有一层结构,可根据实际需求进行设计。

1.第一层的UI

Launcher3--初识Launcher3_第1张图片
图1
    如图1,就是Launcher3的第一层,上面放置了应用图标、搜索栏、小部件等,这是我们直观的可以看到的;从代码设计的角度来说,这一个简单的界面其实是分了好几个部分的,图1中已经对各个部分做了一些注释标记,具体含义如下:
    Workspace:用来放置CellLayout,可存在多个,进行滑动、拖拽等操作
    SearchDropTarget:正常情况下显示搜索框,长按应用或小部件时,显示删除(第一层)或者卸载和应用信息(第二次)或者应用信息(不可卸载应用)
    CellLayout:用来放置应用快捷方式和小部件
    PageIndicator:页面指示器,一般情况下不止一个CellLayout
    Hotseat:热键,一般可放置四个热键,中间那个按钮点击进入第二层。

    当然,如果有很多的图标和小部件的话,一个页面肯定放不下,这样就会分多个页面展示,可同左右滑动来切换,如图2,
Launcher3--初识Launcher3_第2张图片
图2

    基本功能
    1)点击图标打开某个应用,相当于应用快捷方式;
    2)长按图标移动位置或删除,如图3和图4;
    3)也可以长按空白处,看到页面缩小了(概率图模式),显示壁纸和小部件按钮,如图5,用来设置壁纸和添加小部件。
Launcher3--初识Launcher3_第3张图片  Launcher3--初识Launcher3_第4张图片 
图3                                     图4
Launcher3--初识Launcher3_第5张图片
图5

2.第二层的UI(抽屉)

Launcher3--初识Launcher3_第6张图片
图6
    抽屉展示了所有需要显示在Launcher上的应用,这里每页显示20个,页数会根据应用的总数动态创建。提供的功能一个是启动应用,这个跟第一层结构一样;另一个是长按事件,需要区分的是系统内置应用和可卸载应用,如图7和图8),长按系统内置应用时隐藏了卸载功能,因为系统内置应用时不可卸载的。
Launcher3--初识Launcher3_第7张图片 Launcher3--初识Launcher3_第8张图片
图7                                     图8
    虽然整个Launcher3的界面是十分简洁,但是包含大量复杂的自定义view以及触摸事件、拖拽处理等等,所以整个的实现还是比较复杂的,也是要重点分析的。

三、项目代码
    Launcher3作为一个系统组件,系统编译的时候会一同编译,但我们在分析时,为了简单起见,只需要将其作为一个app,并不需要整个的Android编译环境,所以我们用一个Launcher3的AndroidStudio版本就可以了。AndroidStudio版本也在源码的基础上将一些编译错误修改,添加了gradle编译,跟源生的基本一致。
    AndroidStudio的Launcher3代码结构,
Launcher3--初识Launcher3_第9张图片
图9
    有两个子工程,launcher3和wallpaperpick,launcher3当然就是核心代码了,wallpaperpick是壁纸选择器,在我们这个工程里面,wallpaperpick只存放了一些资源文件,相关的代码实现也是放在launcher3目录下的。
    提供一个下载地址链接: http://download.csdn.net/detail/dingfengnupt88/9564616 ,后续就用这套代码来做分析。

你可能感兴趣的:(Launcher3)