`
飞扬云
  • 浏览: 151982 次
  • 来自: 深圳
社区版块
存档分类
最新评论

android 的 Launcher 分析

 
阅读更多

本文是在参考:http://blog.csdn.net/fzh0803/article/details/6279995 

 

文章之后,结合自己修改launcher 时的经历而总结的,如有疑问之处还请指出。

 

不管如何,得先谢谢上面引用的这个帖子。下文是在Android2.2、2.3的基础上得来的

 

 

本文将从以下几个方面来分析。

 

1. 什么android的Launcher ?

 

答: 从字面意思来看就是“发射台、启动台、启动物体”的意思,我个人把它理解成Android的“桌面启动器”,就是我们启动手机或者平板电脑后显示在我们眼前的这个界面,相当于Windows的桌面。

 

 

另外,好像是从android2.1版本开始launcher的版本变成了launcher2。

 

2. Launcher和系统层是否有关联?

 

答:没有关联,launcher就相当于一个应用程序一样。当你修改launcher时,无需全编译,只需要编译这个launcher即可,这里称之为小编译,编译后一起打包就能升级启动。注:我这里把关联理解为是否和底层的C库或者内核关联。

 

3. Launcher包含哪些?

答: 从界面上来看,launcher2的界面构成如图1所示:

图1 Android2.3.4 的Launcher2 界面布局示意图

 

 

Launcher包含了:workspace、壁纸、左右下角的点(单击这个点可以切换屏幕)、右边的DeleteZone 和 HandleView。

 

那什么是workspace呢? 当你左右滑动屏幕时,每个屏幕就相当于一个workspace,一般来说我们可以自定义屏幕的数目,平常我们见到的都是5个。

如图1所示,我们可以看到有workspace、workspace中包含的cell(就是那些小方格)。壁纸、DeleteZone 和 HandleView我没有画出来,这个大家可以打开android手机一看就知道了。

 

注意:状态栏statusbar不属于Launcher,状态栏和系统层有关,关于状态栏的修改请点击这里

 

4. Launcher的源代码在那个目录下?包含哪些文件?

答:主要包含几个java文件和xml文件,当然了,还有图片文件。

因为Launcher好比一个应用程序一样,所以他的目录主要就在packages包下面。

 

java文件: /packages/apps/Launcher2/src/com/android/launcher2/

 

xml文件和图片等文件:/packages/apps/Launcher2/res/

 

关于java文件的含义,请参看这里

 

关于布局文件请看下面的分析。

 

5. 核心的布局文件有哪些?

答:总布局文件分别在:

 

横屏: packages/apps/Launcher2/res/layout-land/launcher.xml

 

竖屏: packages/apps/Launcher2/res/layout-port/launcher.xml

 

就用横屏的launcher.xml分析一下,官方代码是:

 

 

<?xml version="1.0" encoding="utf-8"?>

<!-- Copyright (C) 2007 The Android Open Source Project

 

     Licensed under the Apache License, Version 2.0 (the "License");

     you may not use this file except in compliance with the License.

     You may obtain a copy of the License at

 

          http://www.apache.org/licenses/LICENSE-2.0

 

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS" BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

     See the License for the specific language governing permissions and

     limitations under the License.

-->

 

<com.android.launcher2.DragLayer

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"

 

    android:id="@+id/drag_layer"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

 

    <include layout="@layout/all_apps" />

 

    <!-- The workspace contains 3 screens of cells -->

    <com.android.launcher2.Workspace

        android:id="@+id/workspace"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:scrollbars="horizontal"

        android:fadeScrollbars="true"

        launcher:defaultScreen="2">

 

        <include android:id="@+id/cell1" layout="@layout/workspace_screen" />

        <include android:id="@+id/cell2" layout="@layout/workspace_screen" />

        <include android:id="@+id/cell3" layout="@layout/workspace_screen" />

        <include android:id="@+id/cell4" layout="@layout/workspace_screen" />

        <include android:id="@+id/cell5" layout="@layout/workspace_screen" />

 

    </com.android.launcher2.Workspace>

 

    <com.android.launcher2.ClippedImageView

        android:id="@+id/previous_screen"

        android:layout_width="70dip"

        android:layout_height="@dimen/button_bar_height"

        android:layout_gravity="bottom|center_horizontal"

        android:layout_marginBottom="-5dip"

        android:scaleType="center"

        android:src="@drawable/home_arrows_left"

 

 

 

        launcher:ignoreZone="56dip"

 

        android:focusable="true"

        android:clickable="true" />

 

    <com.android.launcher2.ClippedImageView

        android:id="@+id/next_screen"

        android:layout_width="93dip"

        android:layout_height="@dimen/button_bar_height"

        android:layout_gravity="bottom|right"

        android:layout_marginRight="6dip"

 

        android:scaleType="center"

        android:src="@drawable/home_arrows_right"

 

 

 

        launcher:ignoreZone="-56dip"

 

        android:focusable="true"

        android:clickable="true" />

 

    <com.android.launcher2.DeleteZone

        android:id="@+id/delete_zone"

        android:layout_width="@dimen/delete_zone_width"

        android:layout_height="@dimen/delete_zone_height"

        android:layout_gravity="bottom|center_horizontal"

 

        android:scaleType="center"

        android:src="@drawable/delete_zone_selector"

        android:visibility="invisible"

        launcher:direction="horizontal"

        />

 

    <RelativeLayout

        android:id="@+id/all_apps_button_cluster"

        android:layout_height="fill_parent"

        android:layout_width="@dimen/button_bar_height_portrait"

        android:layout_gravity="right|center_vertical"

        android:layout_marginBottom="@dimen/half_status_bar_height"

        >

 

        <com.android.launcher2.HandleView   

            android:id="@+id/all_apps_button"

            android:layout_centerVertical="true"

            android:layout_alignParentRight="true"

            style="@style/HotseatButton"

            android:src="@drawable/all_apps_button"

            launcher:direction="vertical"

            />

 

        <ImageView

            android:id="@+id/hotseat_left"

            style="@style/HotseatButton.Left"

            android:layout_below="@id/all_apps_button"


            android:src="@drawable/hotseat_setting"


            android:onClick="launchHotSeat"

            /> 

 

        <ImageView

            android:id="@+id/hotseat_right"

            style="@style/HotseatButton.Right"

            android:layout_above="@id/all_apps_button"

 

            android:src="@drawable/hotseat_browser"

 

            android:onClick="launchHotSeat"

            /> 

 

    </RelativeLayout>

</com.android.launcher2.DragLayer>


 

从这个文件可以很容易看出,包含了workspace,handleview,DeleteZone等。

紫红色背景区域代码正好是5个屏幕的布局,他们都引用了同一个布局文件。

 

我们可以把右边的handleview和DeleteZone删除掉,只要把蓝色代码区域注释掉,然后把关联的java文件launcher.java文件中有关的部分代码注释掉即可。

 

6.  能否增加或者减少cell的数量?

答:可以。主要在/packages/res/Launcher2/res/workspase_screen.xml中修改。

 

源代码;

 

 

<com.android.launcher2.CellLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"

 

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:hapticFeedbackEnabled="false"

 

    launcher:cellWidth="@dimen/workspace_cell_width"

    launcher:cellHeight="@dimen/workspace_cell_height"

    launcher:longAxisStartPadding="60dip"

    launcher:longAxisEndPadding="60dip"

    launcher:shortAxisStartPadding="0dip"

    launcher:shortAxisEndPadding="45dip"

    launcher:shortAxisCells="4"

    launcher:longAxisCells="7" />

 

 

 

1) 看绿色区域代码,shortAxisCells表示宽度上cell个数,longAxisCells表示长度上cell得个数。可以根据实际修改这个数字,当然了,如果数字越大,cell就越多,最后很有可能导致屏幕显示不出来,所以个人觉得最好设置小一点。

 

2) 看黄色区域代码,launcher:cellWidth 表示cell的宽度,launcher:cellHeight表示cell的高度。

 

3) 看紫红色区域代码,具体代码含义请看图1所示,其实一眼就能看得出,这四个变量分别代表workspace与屏幕左右上下的内部距离。

 

以上数字可以根据实际情况修改。

 

以上内容比较简单,只是大概介绍了launcher的基本特性,后续还会加深研究。

 

 

 

 

0
1
分享到:
评论

相关推荐

    Android Launcher分析

    ### Android Launcher 分析 #### 一、Launcher概念与作用 **Launcher**,即启动器,在Android系统中扮演着至关重要的角色。它不仅是一款应用程序,也是用户与设备交互的第一道门户,通常被称为“桌面”。Launcher...

    Android Launcher 分析

    ### Android Launcher 分析 #### 一、Launcher启动过程解析 Android Launcher 的启动流程是一个非常重要的概念,对于理解Android系统的启动机制以及如何定制自己的Launcher应用有着关键的作用。 **1.1 Linux ...

    安卓Android源码——安卓Android Launcher 桌面分页滑动代码.rar

    下面,我们将深入探讨Android Launcher桌面分页滑动的相关知识点。 1. **Android UI框架**:在Android中,用户界面主要由View和 ViewGroup 组成。View是基本的UI元素,如按钮、文本框等,而ViewGroup则是布局容器,...

    android launcher 分析修改、定制记录

    基于原生launcher做定制,做了3个项目了,这里有些经验与大家分享一下,顺便混点分。里边的大部分内容是通用的具有参考价值,小部分内容是我所涉及的项目特定的。

    android的launcher分析.pdf

    Android Launcher 分析 Android Launcher 是 Android 系统中的一种应用程序启动器,负责管理和显示应用程序的图标和信息。本文将对 Android Launcher 的架构和实现进行分析,主要包括 Launcher 的主要文件和类、...

    android Launcher源码详解

    本文将对 Launcher 的源码进行深入分析,探讨其运行机制和设计思想。 一、Launcher 的整体结构 Launcher 的整体结构可以通过查看 Launcher.xml 布局文件和使用 hierarchyviewer 布局查看工具来了解。从 hierarchy...

    Android Launcher3源码

    通过分析`Launcher3`的源码,我们可以深入理解Android系统桌面的工作原理,了解如何定制自己的启动器。 1. **项目结构** `Launcher3`源码结构分为几个主要部分:UI组件、数据模型、后台服务、偏好设置和资源文件。...

    android Launcher2.2源码

    1. **Launcher结构分析** Launcher由多个关键组件构成,包括Activity、Service、BroadcastReceiver以及ContentProvider。其中,主Activity是整个应用的核心,它负责加载并显示桌面图标和应用抽屉。源码中的`...

    android Launcher2文件夾功能分析

    **Android Launcher2 文件夹功能分析** 在Android操作系统中,Launcher是用户界面的核心组成部分,它扮演着桌面的角色,允许用户启动应用程序、创建快捷方式以及管理主屏幕上的图标布局。`Launcher2`是Android早期...

    android2.3 launcher分析

    ### Android 2.3 Launcher分析 #### 架构概述 Android 2.3 版本中的Launcher采用的是经典的MVC(Model-View-Controller)架构模式。这种模式将应用程序分为三个核心部分:模型(Model)、视图(View)以及控制器...

    android launcher2源码

    源码分析可以帮助我们理解Android系统的启动过程、应用程序的管理方式以及UI布局和交互逻辑。 1. **启动流程**: 当设备启动时,Launcher2作为系统的一部分被加载。源码中`com.android.launcher2.Launcher`类是...

    android Launcher添加widget源码

    通过分析JYCLauncher的源码,我们可以深入了解Android自定义Launcher中添加Widget的细节,以及如何实现动态添加功能。这不仅可以帮助开发者理解Android系统的内部工作原理,还能为开发具有独特特性的Launcher应用...

    android2.3 launcher分析三

    【Android 2.3 Launcher 分析】 Android 2.3 的 Launcher 是用户界面的核心部分,它作为设备的主要入口,提供用户访问应用程序、小部件和设置的界面。在深入分析之前,我们先了解一下 Launcher 的基本架构。 **...

    Android高级应用源码-Android Launcher 源码修改可编译.zip

    《深入解析Android Launcher源码:实现可编译的高级应用》 在移动操作系统的世界中,Android以其开源性和灵活性深受开发者喜爱。本资料包提供的是一个经过修改,可编译的Android Launcher源码,旨在帮助开发者深入...

    Android应用源码之Android Launcher 桌面分页滑动代码.zip

    这个"Android应用源码之Android Launcher 桌面分页滑动代码"压缩包,显然是为了帮助开发者深入理解Android Launcher的实现原理,特别是关于桌面分页滑动的部分。下面将详细解析这个主题。 一、Android Launcher概述...

    android手把手教你开发launcher(AndroidStudio版)

    Android Studio是官方推荐的Android应用开发环境,它提供了强大的代码编辑、调试、性能分析以及应用打包功能。在Launcher应用的开发过程中,Android Studio不仅可以帮助开发者快速搭建项目结构,还可以利用其内置的...

    Android11 Launcher3

    - **源代码分析**:Launcher3的源代码是开源的,开发者可以从GitHub上的"Launcher3-master"项目获取,通过阅读和理解源码,可以深入学习Android启动器的实现细节。 - **调试工具**:使用Android Studio的调试...

    Launcher3_androidlauncher_android开发_

    二、Launcher3 架构分析 1. **Activity与Fragment**:Launcher3由多个Activity和Fragment组成,每个主屏幕对应一个Fragment。Activity负责整体管理,Fragment则承载具体的桌面视图。 2. **数据存储**:Launcher3...

    Android Launcher 源码

    Android Launcher 是Android操作系统中的核心组件之一,它是用户与设备交互的入口,负责显示应用程序的图标、小部件和其他桌面元素。源码分析可以帮助开发者深入理解Android系统的工作原理,从而提升应用开发的能力...

Global site tag (gtag.js) - Google Analytics