开发者社区> 古镇月影> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

android 4.0 Launcher

简介: 引用:http://mobile.51cto.com/hot-312129.htm 从今天起傻蛋打算做一个系列文章,对最新的Android 4.0 系统中的Launcher,也就是Android 4.0原生的桌面程序,进行一个深入浅出的分析,从而引领Android系统的编程爱好者对 Launcher的设计思想,实现方式来做一个研究,从而能够通过这个实例最掌握到目前世界领先的设计方法,同时在程序中加入我们的一些新的实现。
+关注继续查看

引用:http://mobile.51cto.com/hot-312129.htm

从今天起傻蛋打算做一个系列文章,对最新的Android 4.0 系统中的Launcher,也就是Android 4.0原生的桌面程序,进行一个深入浅出的分析,从而引领Android系统的编程爱好者对 Launcher的设计思想,实现方式来做一个研究,从而能够通过这个实例最掌握到目前世界领先的设计方法,同时在程序中加入我们的一些新的实现。众所周知,对一些优秀源代码的分析,是提高编程水平的一条便捷的方式,希望本系列文章能够给大家带来一定的启发,同时欢迎大家和作者一起讨论,作者的微博是:http://weibo.com/zuiniuwang/

先从整体上对Launcher布局作一个分析,让我们通过查看Launcher.xml 和使用hierarchyviewer布局查看工具两者结合的方法来对Launcher的整体结构有个了解。通过hierarchyviewer来对整个桌面做个截图,如下:

通过hierarchyviewer来对整个桌面做个截图

放大后如下所示: 可以看到整个桌面包含的元素,最上面是Google的搜索框,下面是一个始终插件,然后是图标,再有就是一个分隔线,最后是dock。请注意,桌面程序其实并不包含桌面壁纸,桌面壁纸其实是由 WallpaperManagerService来提供,整个桌面其实是叠加在整个桌面壁纸上的另外一个层。

放大后所示

点击查看大图

整个Launcher.xml布局文件如下:

  1. <com.android.launcher2.DragLayer 
  2.     xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher" 
  4.  
  5.     android:id="@+id/drag_layer" 
  6.     android:layout_width="match_parent" 
  7.     android:layout_height="match_parent"> 
  8.  
  9.     <!-- Keep these behind the workspace so that they are not visible when 
  10.          we go into AllApps --> 
  11.     <include 
  12.         android:id="@+id/dock_divider" 
  13.         layout="@layout/workspace_divider" 
  14.         android:layout_width="match_parent" 
  15.         android:layout_height="wrap_content" 
  16.         android:layout_marginBottom="@dimen/button_bar_height" 
  17.         android:layout_gravity="bottom"  /> 
  18.     <include 
  19.         android:id="@+id/paged_view_indicator" 
  20.         layout="@layout/scroll_indicator" 
  21.         android:layout_width="wrap_content" 
  22.         android:layout_height="wrap_content" 
  23.         android:layout_gravity="bottom" 
  24.         android:layout_marginBottom="@dimen/button_bar_height"  /> 
  25.  
  26.     <!-- The workspace contains 5 screens of cells --> 
  27.     <com.android.launcher2.Workspace 
  28.         android:id="@+id/workspace" 
  29.         android:layout_width="match_parent" 
  30.         android:layout_height="match_parent" 
  31.         android:paddingTop="@dimen/qsb_bar_height_inset" 
  32.         android:paddingBottom="@dimen/button_bar_height" 
  33.         launcher:defaultScreen="2" 
  34.         launcher:cellCountX="4" 
  35.         launcher:cellCountY="4" 
  36.         launcher:pageSpacing="@dimen/workspace_page_spacing" 
  37.         launcher:scrollIndicatorPaddingLeft="@dimen/workspace_divider_padding_left" 
  38.         launcher:scrollIndicatorPaddingRight="@dimen/workspace_divider_padding_right"> 
  39.  
  40.         <include android:id="@+id/cell1" layout="@layout/workspace_screen"  /> 
  41.         <include android:id="@+id/cell2" layout="@layout/workspace_screen"  /> 
  42.         <include android:id="@+id/cell3" layout="@layout/workspace_screen"  /> 
  43.         <include android:id="@+id/cell4" layout="@layout/workspace_screen"  /> 
  44.         <include android:id="@+id/cell5" layout="@layout/workspace_screen"  /> 
  45.     </com.android.launcher2.Workspace> 
  46.  
  47.     <include layout="@layout/hotseat" 
  48.         android:id="@+id/hotseat" 
  49.         android:layout_width="match_parent" 
  50.         android:layout_height="@dimen/button_bar_height_plus_padding" 
  51.         android:layout_gravity="bottom"  /> 
  52.  
  53.     <include 
  54.         android:id="@+id/qsb_bar" 
  55.         layout="@layout/qsb_bar"  /> 
  56.  
  57.     <include layout="@layout/apps_customize_pane" 
  58.         android:id="@+id/apps_customize_pane" 
  59.         android:layout_width="match_parent" 
  60.         android:layout_height="match_parent" 
  61.         android:visibility="invisible"  /> 
  62.  
  63.     <include layout="@layout/workspace_cling" 
  64.         android:id="@+id/workspace_cling" 
  65.         android:layout_width="match_parent" 
  66.         android:layout_height="match_parent" 
  67.         android:visibility="gone"  /> 
  68.  
  69.     <include layout="@layout/folder_cling" 
  70.         android:id="@+id/folder_cling" 
  71.         android:layout_width="match_parent" 
  72.         android:layout_height="match_parent" 
  73.         android:visibility="gone"  /> 
  74. </com.android.launcher2.DragLayer> 

Launcher整个布局的根是DragLayer,DragLayer继承了FrameLayout,所以DragLayer本身可以看作是一个FrameLayout。下面是 dock_divider,它通过include关键字包含了另外一个布局文件workspace_divider.xml ,而这个workspace_divider.xml包含了一ImageView,其实dock_divider就是dock区域上面的那条直线。

再下面是paged_view_indicator,同样它包含了scroll_indicator.xml,其中包含了一个ImageView,显示的是一个.9的png文件。实际上就是当Launcher滚动翻页的时候,那个淡蓝色的页面指示条。

然后桌面的核心容器WorkSpace,如下图所示,当然你看到的只是Workspace的一部分,其实是一个workspace_screen,通过 Launcher.xml可以看到,整个workspace由5个workspace_screen组成,每个workspace_screen其实就是对应桌面一页。而每个workspace_screen包含了一个CellLayout,这是一个自定义控件,继承自ViewGroup,所以它算是一个用来布局的控件,在这里主要用来承载我们每页的桌面图标、widget和文件夹。

桌面的核心容器WorkSpace

点击查看大图

通过查看如下的布局结构(由于图太大只截取了一部分)可以看到,Workspace包含了序号从0到4的5个CellLayout。

查看布局结构

接下来是一个Hotseat,其实就是这块dock区域了。如图所示:

dock区域

点击查看大图

从如下的布局图我们可以看到,这个Hotseat其实还是包含了一个CellLayout,用来承载4个图标和中间启动所有程序的按钮。

用来承载4个图标和中间启动所有程序的按钮

再下来就是那个qsb_bar,就是屏幕最顶端的Google搜索框。这个搜索框是独立于图标界面的,所以当我们对桌面进行翻页的时候,这个搜索框会巍然不动滴固定在最顶端,如下所示:

最顶端的Google搜索框

紧接着是3个初始化时被隐藏的界面。

apps_customize_pane,点击dock中显示所有应用程序的按钮后才会从隐藏状态转换为显示状态,如下图所示,显示了所有应用程序和所有插件的界面。

所有应用程序和所有插件的界面

点击查看大图

通过查看apps_customize_pane.xml ,我们可以看到apps_customize_pane主要由两部分组成:tabs_container 和tabcontent。tabs部分,用来让我们选择是添加应用程序还是widget,如下图所示:

用来让我们选择是添加应用程序还是widget

点击查看大图

tabcontent,选择了相应的tab之后,下面的部分就会相应的显示应用程序或是widget了,如下图所示:

面的部分就会相应的显示应用程序或是widget

点击查看大图

workspace_cling  和 folder_cling 是刚刷完机后,进入桌面时,显示的使用向导界面,介绍怎么使用workspace和folder,跳过以后就再也不会出现了,这里就不截图了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
83 0
【我的Android进阶之旅】快速创建和根据不同的版本类型(Dev、Beta、Release)发布Android 开发库到Maven私服
前言 由于项目越来越多,有很多公共的代码都可以抽取出一个开发库出来传到公司搭建好的Maven私服,以供大家使用。 之前搭建的Maven仓库只有Release和Snapshot两个仓库,最近由于开发库有时候不稳定有bug,不便于测试。
1339 0
【福利大放送】不止是Android,Github超高影响力开源大放送,学习开发必备教科书
GitHub 还在持续更新:https://github.com/nanchen2251/StudyForAndroid 一、写在前面 最近项目重构,时间贼多,也没什么时间更新博客,个人的开源项目也是多时没有更新了:https://github.com/nanchen2251/AiYaSchoolPush,然而没有更新不代表我不在乎,后面一有空还是会继续提交的。
1450 0
android studio 开发android app 真机调试
http://www.cnblogs.com/EasyInvoice/p/4415673.html
735 0
HTML/JS 调用android方法,开发 Android。
初次尝试用HTML/JS开发Android。 由于业务需求和大趋势导致,目前纵观很多APP。很多都是用H5+native的方式去开发。关于wepApp和nativeApp它们之前的是是非非就不说了。 下面是利用H5应该是JS去调用本地Android的代码。 不是什么特别高深的东西。 第一布局: 1 <RelativeLayou
1730 0
一位android开发程序猿的小工具集合
工欲善其事,必先利其器 以下是我开发中或生活中用的个人觉得比较好的工具软件,一款好用的工具,往往能事半功倍 PostMan(ChromeApp) 一个可以模拟实现HTTP get和post的请求工具,方面设置请求参数和查看响应结果。
920 0
+关注
1699
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载