1) 大家都知道workspace是有celllayout组成。Celllayout被划分为了4行4列的表格,用Boolean类型的mOccupied二维数组来标记每个cell是否被占用。在attrs.xml中定义了shortAxisCells和longAxisCells分别存储x轴和y轴方向的cell个数。在Celllayout构造函数中初始化。
2) 内部类CellInfo为静态类,实现了ContextMenu.ContextMenuInfo接口。其对象用于存储cell的基本信息。
VacantCell类用于存储空闲的cell,用到了同步机制用于管理对空闲位置的操作。所有的空cell都存储在vacantCells中。
cellX和cellY用于记录cell的位置,起始位0。如:(0,0) (0,1),每一页从新开始编号。
clearVacantCells作用是将Vacant清空:具体是释放每个cell,将list清空。
findVacantCellsFromOccupied从存放cell的数值中找到空闲的cell。在Launcher.Java中的restoreState方法中调用。
3) mPortrait用于标记是横屏还是竖屏,FALSE表示竖屏,默认为FALSE。
4) 修改CellLayout页面上cell的布局:
CellLayout页面上默认的cell为4X4=16个,可以通过修改配置文件来达到修改目的。
在CellLayout.Java类的CellLayout(Context context, AttributeSet attrs, int defStyle)构造方法中用变量mShortAxisCells和mLongAxisCells存储行和列。
其值是在自定义配置文件attrs.xml中定义的,并在workspace_screen.xml中赋初值的,初值都为4,即4行、4列。可以在workspace_screen.xml修改对应的值。
注意:CellLayout构造方法中从attrs.xml中获取定义是这样的:mShortAxisCells = a.getInt(R.styleable.CellLayout_shortAxisCells, 4);当workspace_screen.xml中没有给定义的变量赋值时,上面的4就起作用。
5)下面的分析转载自:http://blog.csdn.net/netpirate/archive/2009/06/05/4245445.aspx
Launcher(主屏/待机) App的BUG: 没有初始化定义CellLayout中屏幕方向的布尔值参数
Launcher App:\cupcake\packages\apps\Launcher
待机画面分为多层,桌面Desktop Items在\res\layout-*\workspace_screen.xml中置:
<com.android.launcher.CellLayout
... ...
launcher:shortAxisCells="4"
launcher:longAxisCells="4"
... ...
/>
表示4行4列
再看看 com.android.launcher.CellLayout ,其中有定义屏幕方向的参数,
private boolean mPortrait;
但是一直没有初始化,也就是mPortrait=false,桌面的单元格设置一直是以非竖屏(横屏)的设置定义进行初始化。
再来看看横屏和竖屏情况下的初始化不同之处,就可以看出BUG了。
boolean[][] mOccupied;//二元单元格布尔值数组
if (mPortrait) {
mOccupied = new boolean[mShortAxisCells][mLongAxisCells];
} else {
mOccupied = new boolean[mLongAxisCells][mShortAxisCells];
}
如果我们满屏显示桌面(横向和纵向的单元格数不一致),而不是默认的只显示4行4列,则mShortAxisCells = 4, mLongAxisCells = 5,数组应该初始化是:new boolean[4][5],但是实际是按照非竖屏处理,初始化成了new boolean[5][4],会产生数组越界异常。
可以在构造函数中,添加通过屏幕方向初始化mPortrait,代码如下:
public CellLayout(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mPortrait = this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;// 新增代码
... ...
分享到:
相关推荐
仿照Launcher简单实现一下CellLayout布局方式,可以通过手动点击的方式往特定的栅格中放入一张图片,请大家不吝赐教,相关说明移步博客http://blog.csdn.net/program_thinker/article/details/40265169
数据的存储是通过一个或多个SQLite数据库来实现的, Launcher中有专门的数据库辅助类来处理与数据库相关的操作。 通过上述内容,我们系统性地分析了Launcher应用的核心实现,从界面配置到启动流程,再到数据处理和...
【Android 2.3 Launcher 分析】 Android 2.3 的 Launcher 是用户界面的核心部分,它作为设备的主要入口,提供用户访问应用程序、小部件和设置的界面。在深入分析之前,我们先了解一下 Launcher 的基本架构。 **...
**Android Launcher2 文件夹功能分析** 在Android操作系统中,Launcher是用户界面的核心组成部分,它扮演着桌面的角色,允许用户启动应用程序、创建快捷方式以及管理主屏幕上的图标布局。`Launcher2`是Android早期...
该源码分析了 Android_launcher 的主要组件和类,包括 Launcher.java、DragLayer.java、DragController.java、LauncherModel.java、Workspace.java、LauncherProvider.java、CellLayout.java、ItemInfo.java、User...
在Android系统中,Launcher是用户界面的核心组成部分,它负责展示应用程序的快捷方式和主屏幕小部件,让用户体验到个性化和便捷的操作。而SlidingDrawer组件是Android SDK提供的一种交互控件,它允许开发者在界面中...
在Android开发中,Launcher是用户接触系统的第一个界面,它通常包含主屏幕(也称为工作区WorkSpace)和其他应用快捷方式。工作区的左右滑动效果是Android Launcher的一个核心功能,让用户能够轻松地在不同的主屏幕...
1. **Launcher结构分析** Launcher由多个关键组件构成,包括Activity、Service、BroadcastReceiver以及ContentProvider。其中,主Activity是整个应用的核心,它负责加载并显示桌面图标和应用抽屉。源码中的`...
在Android系统中,`launcher`类扮演着至关重要的角色,它是用户与系统界面交互的入口,也就是我们常说的桌面应用。通常,`launcher`是系统启动的第一个Activity,它负责显示应用快捷方式、小部件以及主屏幕。理解`...
在本文中,我们将深入分析`launcher`源码,特别是`Launcher3`项目,来理解其工作原理和设计思路。 首先,我们来看`Launcher3`的主要组件。`Launcher3`是Android开源项目中的一个版本,它主要由以下几个关键部分构成...
### Android 2.3 Launcher分析 #### 架构概述 Android 2.3 版本中的Launcher采用的是经典的MVC(Model-View-Controller)架构模式。这种模式将应用程序分为三个核心部分:模型(Model)、视图(View)以及控制器...
《Launcher2源码分析》 在Android系统中,Launcher作为用户与系统交互的起点,扮演着至关重要的角色。本文将深入探讨Android 4.0版本的Launcher2源码,主要涉及桌面快捷图标的拖拽机制、Workspace切换到AllApps流程...
Launcher3中的常用类 Launcher3的启动流程(一) 细说ItemInfo Launcher3的启动流程(二) Launcher3分析之拖动图标的流程——按下 Launcher3分析之拖动图标的流程——移动 Launcher3分析之拖动图标的流程——放下 ...
介绍了launcher启动时各个类之间的调用次序。
Android Launcher 的架构和实现进行分析,主要包括 Launcher 的主要文件和类、DragLayer 的实现、DragController 的作用、LauncherModel 的数据库操作、Workspace 的抽象、LauncherProvider 的数据库存储、...
《Android Launcher2中的PagedView分析》 在Android系统中,Launcher是用户界面的核心部分,它为用户提供了一个可自定义的主屏幕,其中包括各种应用程序、快捷方式和小部件。而`PagedView`是`Launcher2`中的一个...
本篇文章将深入分析Android 2.1版本的Launcher2,并探讨其核心组件和功能。 1. **Launcher.java**: 这是Launcher的主要Activity,负责整个启动器的生命周期管理和界面布局。它初始化并管理其他关键组件,如...
4. **布局管理**:使用`Workspace`和`CellLayout`类来组织和管理桌面的网格布局,允许用户自定义屏幕数量和每个屏幕上的图标排列。 5. **动画和过渡效果**:Android的动画框架在Launcher2中用于提供滑动屏幕、添加/...
本文将深入探讨Android 2.3版本中的Launcher系统,并重点分析LiveFolder的功能及其如何与Launcher交互,以及Launcher默认界面配置的方式和方法。 #### LiveFolder概述 LiveFolder作为Android 2.3系统中的一个重要...