Android开发第一讲之目录结构和程序的执行流程

1、如何在eclipse当中,修改字体

下面的这种办法,可以更改xml的字体

窗口——首选项——常规——外观——颜色和字体——基本——文本字体——编辑
Window --> Preferences --> General --> Appearance --> Colors and Fonts --> Basic --> Text Font –> Edit
我们也可以在basic相同的位置,点击java,就可以修改java的字体了。
2、Android项目的目录结构和程序的执行流程
下面是android项目的目录层次结构图
                                  
image
下面我们将分别进行介绍:
1、src/   这个文件下面存放的是,.java的包。也就是java源代码的包。
2、gen/   这个文件存在的是android开发工具所生成的目录。该目录下的所有文件,都是系统自动生成的。而且R.java很重要,它里面有每个控件的id,但我们不知道每个控件是怎么命名的。所以,我们一般都要将它重新命名,而不用他原来的。重新命名相当于重新起了一个名字一样,一般用 android:id="@+id/tv_user_name"   
3、android 2.1 这个文件里面,应该是android里面自带的jar包
4、assets/   该目录用来存放应用中用到的类似于视频文件、MP3 一些媒体文件。
5、bin /     该目录下存放着一些apk,就是编译完之后的一些信息。当然也有AdroidManifest.xml信息。
6、res       该目录下,全是一些资源信息,当然我们也可以新建文件夹,然后导入音乐或者其他什么的资源信息,这些都可以。  我们也称该目录为资源目录,该目录存放一些图标、界面文件、应用中用到的文字信息。布局文件等等。
7、AndroidManifest.xml  该文件是功能清单文件,该文件列出了应用中所有组件,如Activity,servic,以及后面我们将要学到的广播接收者,服务等组件。每个组件都需要在此文件中注册,才可以使用。
8、project.properties 该文件存放了项目中对应的一些环境配置,一般不需要修改。
注:最重要的文件,我现在用颜色标记。

     其中,资源是 Android 应用程序不可或缺的部分。资源是你想包含和引入到应用程序里面的一些外部元素,比如图片、音频、视频、文本字符串、布局、主题等。每个 Android应用程序包含一个资源目录(res/)和资产目录(assets/),但资产不经常被使用,因为它们的应用很少。仅在需要读取原始字节流时才需要保存数据在 assets/目录。Res/和 assets/ 目录均在 Android 项目树的顶端,和源代码目录(src/)处在同一级上。资源和资产从表面上看没多大区别,不过总体上,在存储外部内容时资源用得更多。真正的区别在于任何放置在资源目录里的内容可以通过您的应用程序的 R 类访问,这是被 Android 编译过的。而任何存放在资产目录里的内容会保持它的原始文件格式,为了读取它,你必须使用AssetManager来以字节流的方式读取文件。所以保持文件和数据在资源中(res/)中会更方便访问。

     资源被编译到最终的 APK 文件里。Android 创建了一个被称为 R 的类 ,这样你在 Java 代码中可以通过它关联到对应的资源文件。R 类包含的子类的命名由资源在 res/目录下的文件夹名称所决定。

res/目录下可以有以下几个子目录,部分目录(文件)开发工具并没有自动创建,根据需要我们可以自行创建,介绍如下表。

关于 res/子目录的一些补充说明:

1. 【res/drawable】

res/目录下有三个 dawable 文件夹——【drawable-*dpi】,区别只是将图标按分辨率高低来放入不同的目录,【drawable-hdpi】用来存放高分辨率的图标,【drawable-mdpi】用来存放中等分辨率的图标,【drawable-ldpi】用来存放低分辨率的图标。程序运行时可以根据手机分辨率的高低选取相应目录下的图标。不过,如果不想准备过多图片,那么也可以只准备一张图标将其放入三个目录的任何一个中去。

2. 【res/values/】文件夹下常放的文件如下:

1) strings.xml

用来定义字符串和数值,在 Activity 中使用 getResources().getString(resourceId) 或 getResources().getText(resourceId)取得资源。在 Eclipse 中对 res/values 下的文件左键双击或右键单击后选择【Open With】.. 【Android Resource Editor】编辑 器打开。默 认是【 Resources】显示 ,点击旁边 的 【strings.xml】,显示代码内容。如图。

clip_image001clip_image002

下载 (32.14 KB)

2011-1-16 21:41

clip_image001[1]clip_image003

下载 (30.59 KB)

2011-1-16 21:41

HelloWorld 项目的 strings.xml 文件内容如下:

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

2. <resources>

3. <string name= "hello">Hello World, HelloActivity!</string>

4. <string name= "app_name"> Android,你好!</string>

5. </resources>

复制代码

每个 string 标签声明了一个字符串,name 属性指定其引用名。

为什么需要把应用中出现的文字单独存放在 strings.xml 文中呢?

原因有二,一是为了国际化,Android 建议将在屏幕上显示的文字定义在 strings.xml 中,如果今后需要进行国际化,比如我们开发的应用本来是面向国内用户的,当然要在屏幕上使用中文,而如今我们要让应用走向世界,打入日本市场,当然需要在手机屏幕上显示日语,如果没有把文字信息定义在 strings.xml 中,就需要修改程序内容了。但当我们把所有屏 幕 上 出 现 的 文 字 信 息 都 集 中 存 放 在 strings.xml 文 件 之 后 , 只 需 要 再 提 供 一 个strings.xml 文件,把里面的汉字信息都修改为日语,再运行程序时,Android 操作系统会根据用户手机的语言环境和国家来自动选择相应的 strings.xml 文件,这时手机界面就会显示出日语。这样做国际化非常的方便。

二是为了减少应用的体积,降低数据冗余。假设在应用中要使用“我们一直在努力”这段文字 10000 次,如果我们不将“我们一直在努力”定义在 strings.xml 文件中,而是在每次使用时直接写上这几个字,这样下来程序中将有 70000个字,这 70000 个字占 136KB 的空间。而由于手机的资源有限,其 CPU 的处理能力及内存是非常有限的,136KB 对手机程序来说是个不小的空间,我们在做手机应用是一定要记住“能省内存就省内存”。而如果将这几个字定义在 strings.xml 中,在每次使用到的地方通过Resources 类来引用该文字,只占用了 14B,因此对降低应用体积效果是非常有效地。当然我们可能在开发时可能并不会用到这么多的文字信息,但是“不以善小而不为,不以恶小而为之”,作为手机应用开发人员,我们一定要养成良好的编程习惯。

2) arrays.xml

用来定义数组,在 Activity 中使用 getResources().getStringArray(resourceId)获

取一个 String 数组。

示例代码如下:

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

2. <resources>

3. <string-array name="sports">

4. <item>足球</item>

5. <item>篮球</item>

6. <item>太极</item>

7. <item>乒乓球</item>

8. </string-array>

9. </resources>

复制代码

3) colors.xml

用来定义颜色和颜色字串数值,你可以在 Activity 中使用

getResources().getDrawable(resourceId) 以及

getResources().getColor(resourceId)取得这些资源。示例如下:

1. <?xml version="1.0" encoding="UTF-8"?>

2. <resources>

3. <color name="contents_text">#ff000000</color>

4. </resources>

复制代码

4) dimens.xml

用来定义尺寸数据,在 Activity 中使用 getResources().getDimension(resourceId)

取得这些资源

1. <?xml version="1.0" encoding="UTF-8"?>

2. <resources>

3. <dimen name="height">80dip</dimen>

4. </resources>

复制代码

5) styles.xml

定义样式。

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

2. <resources>

3. <style name="sharpText">

4. <item name="android:textSize">18px</item>

5. <item name="android:textColor">#008</item>

6. </style>

7. </resources>

复制代码

需要注意的是,Android 中的资源文件不要以数字作为文件名,这样会导致错误。

3. res/layout/目录下的布局文件简介

本例中的布局文件是 ADT 默认自动创建的“main.xml”文件。在 Eclipse 中,双击 “main.xml”文件,或者右击以选择相应的编辑器,选用“Android Layout Editor”。在编辑区出现如下界面,默认显示的是“Layout 编辑器”的预览效果。可以点击 Layout 选项卡旁边的 main.xml,切换到代码模式以编辑。

clip_image001[2]clip_image004

下载 (60.9 KB)

2011-1-16 21:43

clip_image001[3]clip_image005

下载 (37.58 KB)

2011-1-16 21:43

clip_image001[4]clip_image006

下载 (38.6 KB)

2011-1-16 21:43

与在网页中布局中使用 HTML 文件一样,Android 在 XML 文件中使用 XML 元素来设定屏幕布局。每个文件包含整个屏幕或部分屏幕,被编译进一个视图资源,可以被传递 给 Activity.setContentView 或被其他布局文件引用。文件保存在工程的 res/layout/ 目录 下,它被 Android 资源编辑器编译。 下面介绍HelloWorld项目的main.xml文件的内容。

main.xml

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

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

3. android:orientation="vertical" android:layout_width="fill_parent"

4. android:layout_height="fill_parent">

5. <TextView android:layout_width="fill_parent"

6. android:layout_height="wrap_content" android:text="@string/hello" />

7. </LinearLayout>

复制代码

我们逐元素进行分析说明:

<LinearLayout>元素

“LinearLayout”翻译成中文是“线性布局”,所谓线性布局就是在该元素下的所有子元素会根据其“orientation”属性的值来决定是按行或者是按列逐个显示。后面章节有详细的介绍。

<TextView>元素

该元素与HTML中的<label>元素比较相似。也是一种显示控件。其属性text指定在该元素上面显示的文字内容。建议将该文字内容在strings.xml文件中进行定义,之后再在main.xml文件中通过“@string/stringName”的方式进行引用。

1.2.1 gen/目录下的 R.java 文件详解

接下来我们再来详细学习 R.java 文件。

R.java 文件中默认有 attr、drawable、layout、string 等四个静态内部类,每个静态内部类分别对应一种资源,如 layout 静态内部类对应 layout 中的界面文件,其中每个静态内 部 类 中 的 静 态 常 量 分 别 定 义 一 条 资 源 标 识 符 ,

如 “ public static final int main=0x7f030000;”对应的是 layout 目录下的 main.xml 文件。具体的对应关系,如下图。

clip_image001[5]clip_image007

下载 (72.74 KB)

2011-1-16 22:25

由于目前【drawable-*dpi】目录下都只有 icon.png 一个图片文件,因此此时不同像素 的 同 名 的 icon.png 文 件 在 drawable 内 部 类 中 只 有 一 个 icon 属 性 。 如 果 我 们 在【drawable-*dpi】目录下再添加一幅图片sharpandroid.png,那么会有什么效果出现呢?请看下图。

clip_image001[6]clip_image008

下载 (28.32 KB)

2011-1-16 22:26

现在已经理解了 R.java 文件中内容的来源,也即是当开发者在 res/目录中任何一个子 目录中添加相应类型的文件之后,ADT 会在 R.java 文件中相应的匿名内部类当中自动生成一条静态 int 类型的常量,对添加的文件进行索引。如果在 layout 目录下在添加一个新的界面,那么在 public static final class layout 中也会添加相应的静态 int 常量。相反的,当我们再 res 目录下删除任何一个文件,其在 R.java 中对应的记录会被 ADT 自动删除。 再比如说我们在【strings.xml】添加一条记录,在 R.java 的 string 内部类中也会自动增加一条记录。

R.java 文件会给我们开发程序带来很大的方便,比如在程序中我们使用“public static final int icon=0x7f020000;”就可以找到其对应的 icon.png 这幅图片。

R.java 文件除了有自动标识资源的“索引”功能之外,还有另一个主要的功能,当 res 目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源 编译到该应用的 APK 包中,这样可以节省 Android 手机的资源。

1.2.2组件标识符

通过对 R.java 文件的介绍,我们已经了解了 R 文件的索引作用,它可以检索到我们应用中需要使用的资源。下面介绍如何通过 R.java 文件来引用到所需要的资源。

1. 在 Java 程序当中,我们可以按照 Java 的语法来引用。

1) R.resource_type.resource_name

需要注意的是,resource_name 不需要文件的后缀名。比如说上面的 icon.png 文件的资源标识符可以通过如下方式获取。R.drawable.icon

2) android.R.resource_type.resource_name

Android 系统本身自带了很多的资源,我们也可以进行引用,只是需要在前面加上 “android.”以声明该资源来自 Android 系统。

2. 在 XML 文件中引用资源的语法如下:

1) @[package:]type/name

使用我们自己包下的资源可以省略 package。

在 xml 文 件 中 , 如 main.xml 以 及 AndroidMainfest.xml 文 件 中 通 过 “@drawable/icon”的方式获取。其中“@”代表的是 R.java 类,“drawable”代表 R.java中的静态内部类“drawable”,“/icon”代表静态内部类“drawable”中的静态属性“icon”。而该属性可以指向 res 目录下的“drawable-*dpi”中的 icon.png 图标。其他类型的文件也比较类似。凡是在 R 文件中定义的资源都可以通过

“@ Static_inner_classes_name/resourse_name”的方式获取。如“@id/button”,“@string/app_name”。

2) 如果访问的是 Android 系统中带的文件,则要添上包名“android:”。如 android:textColor="@android:color/red" 。

3. “@+id/string_name”表达式

顺便说一下,在布局文件当中我们需要为一些组件添加 Id 属性作为标示,可以使用如 下的表达式“@+id/string_name”其中“+”表示在 R.java 的名为 id 的内部类中添加一条 记录。如 "@+id/button"的含义是在 R.java 文件中的 id 这个静态内部类添加一条常量名为button,该常量就是该资源的标识符。如果 id 这个静态内部类不存在,则会先生成它。通 过该方式生成的资源标识符,仍然可以以“@id/string_name”的方式引用。示例代码片段如下。

1. <RelativeLayout android:layout_width="fill_parent"

2. android:layout_height="wrap_content">

3. <Button android:layout_width="wrap_content"

4. android:layout_height="wrap_content"

5. android:text="@string/cancle_button"

6. android:layout_alignParentRight="true" android:id="@+id/cancle" />

7. <Button android:layout_width="wrap_content"

8. android:layout_height="wrap_content"

9. android:layout_toLeftOf="@id/cancle"

10. android:layout_alignTop="@id/cancle" android:text="@string/ok_button" />

11. </RelativeLayout>

复制代码

其中,android:id="@+id/cancle"将其所在的 Button 标识为 cancle,在第二个 Butto中通过"@id/cancle"对第一个 Button 进行引用。

1.2.3 AndroidManifest.xml 介绍

如果要查看 AndroidManifest.xml 的详细信息,可以到帮助文档中去了解。路径如下: Dec Guide】..【The AndroidManifest.xml File】超链接。

每个应用程序都有一个功能清单文件 AndroidManifest.xml(一定是这个名字)在它的 根目录里。这个清单文件给 Android 系统提供了关于这个应用程序的基本信息,系统在运行任何程序代码之前必须知道这些信息。今后我们开发 Activity、Broadcast、Service 之后都要在 AndroidManifest.xml 中进行定义。另外如果我们使用到系统自带的服务如拨号服 务、应用安装服务、GPRS 服务等都必须在 AndroidManifest.xml 中声明权限。 AndroidManifest.xml 主要包含以下功能:

. 命名应用程序的 Java 应用包,这个包名用来唯一标识应用程序;

. 描述应用程序的组件——活动、服务、广播接收者、内容提供者;对实现每个组件和公布其功能(比如,能处理哪些意图消息)的类进行命名。这些声明使得 Android 系统了解这些组件以及它们在什么条件下可以被启动;

. 决定应用程序组件运行在哪个进程里面;

. 声明应用程序所必须具备的权限,用以访问受保护的部分 API,以及和其它应用程序交互;

. 声明应用程序其他的必备权限,用以组件之间的交互;

. 列举测试设备 Instrumentation 类,用来提供应用程序运行时所需的环境配置及其他信息,这些声明只在程序开发和测试阶段存在,发布前将被删除;

. 声明应用程序所要求的 Android API 的最低版本级别;

. 列举 application 所需要链接的库;

程序中使用的所有组件都会在功能清单文件中列出来,所以我们先分析功能清单文件。只有下列元素才是功能清单文件中的合法元素,应用开发者不能添加自己的元素或属性。

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

2. <manifest>

3. <uses-permission />

4. <permission />

5. <permission-tree />

6. <permission-group />

7. <instrumentation />

8. <uses-sdk />

9. <uses-configuration />

10. <uses-feature />

11. <supports-screens />

12. <application>

13.   <activity>

14.    <intent-filter>

15.     <action />

16.     <category />

17.     <data />

18.    </intent-filter>

19.    <meta-data />

20.   </activity>

21.   <activity-alias>

22.    <intent-filter>. . .</intent-filter>

23.    <meta-data />

24.   </activity-alias>

25.   <service>

26.    <intent-filter>. . .</intent-filter>

27.    <meta-data />

28.   </service>

29.   <receiver>

30.    <intent-filter>. . .</intent-filter>

31.    <meta-data />

32.   </receiver>

33.   <provider>

34.    <grant-uri-permission />

35.    <path-permission />

36.    <meta-data />

37.   </provider>

38.   <uses-library />

39. </application>

40. </manifest>

复制代码

下面以 HelloWorld 项目的功能清单文件为例进行讲解。

AndroidManifest.xml

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

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

3. package="com.test" android:versionCode="1" android:versionName="1.0">

4. <application android:icon="@drawable/icon"

5.   android:label="@string/app_name">

6.   <activity android:name=".HelloWord"

7.    android:label="@string/app_name">

8.    <intent-filter>

9.     <action android:name="android.intent.action.MAIN" />

10.     <category

11.      android:name="android.intent.category.LAUNCHER" />

12.    </intent-filter>

13.   </activity>

14. </application>

15. </manifest>

复制代码

以下详细介绍各个标签:

1. <manifest>元素

1. <manifest xmlns:android=http://schemas.android.com/apk/res/android

2. package="com.test" android:versionCode="1" android:versionName="1.0">

复制代码

该元素是 AndroidManifest.xml 文件的根元素,该元素为必选。其中根据 xml 文件的语法 ,“ xmlns:android ” 指 定 该 文 件 的 命 名 空 间 。 功 能 清 单 文 件 会 使 用 “http://schemas.android.com/apk/res/android”所指向的一个文件。“package”属性是指定 Android 应用所在的包,以后会经常说到“应用的包”,“应用的包”就是指该属性的内容。“android:versionCode”指定应用的版本号。如果应用需要不断升级,在升级的时候应该修改该值。“android:versionName”是版本名称,名称的取定可根据爱好而定。

2. <application>元素

1. <application android:icon="@drawable/icon"

2. android:label="@string/app_name">

3. <activity android:name=".HelloWord"

4. android:label="@string/app_name">

5. <intent-filter>

6. <action android:name="android.intent.action.MAIN" />

7. <category android:name="android.intent.category.LAUNCHER" />

8. </intent-filter>

9. </activity>

10. </application>

复制代码

<application>是非常重要的一个元素,今后我们开发的许多组件都会在该元素下定义 的。 该元素为必选元素。

<application>的“icon”属性是用来设定应用的图标。icon="@drawable/icon" 该表达式指向的是 icon.png 图片。与R.java中元素的对应关系,如下图。

clip_image001[7]clip_image009

下载 (27.92 KB)

2011-1-16 22:43

<application>的“label”属性用来设定应用的名称。指定其属性值所用的表达式 “@string/app_name”含义与上面的表达式“@drawable/icon”一样,同样是指向 R.java 文 件中 的 string 静 态内 部 类中 的 app_name 属 性所 指 向的 资 源。 在 这里 它 指向 的 是“strings.xml”文件中的一条记录“app_name”,其值为“testApp”,因此,这种表达方式等价于 android:label= " testApp "。

两者结合起来,当程序发布到模拟器上之后,会在“抽屉”中显示效果,如下。

clip_image001[8]clip_image010

下载 (53.6 KB)

2011-1-16 22:44

3. <activity>元素

<activity>元素的作用是注册一个 Activity 信息,当我们在创建“testApp”这个项目时,指定了【Create Activity】属性为“HelloWorld”,之后 ADT 在生成项目时帮我们自动创建了一个 Activity 名称就是“HelloWorld.java”,Activity 在 Android 中属于组件,它需要在功能清单文件中进行配置。

<activity>元素的“name”属性指定的是该 Activity 的类名。我们可以看到这个属性值“.HelloWorld”中的“.”,“.”代表的是在上面<manifest>元素的“package”属性中指定的当前包。因而“.HelloWorld”的含义等价于“com.test. HelloWorld.java”。

<activity>元素的“label”属性表示 Activity 所代表的屏幕的标题,其属性值的表达式在上面已经介绍过了,不再赘述。该Activity运行后的效果如下

clip_image001[9]clip_image011

下载 (9.23 KB)

2011-1-16 22:45

4. <intent-filter>元素

Intent的中文可以理解为“意图,目的”之类的意思。首先简单介绍什么是Intent。应用程序的核心组 件(活动、服务和广播接收器)通过Intent被激活,Intent代表的是你要做的一件事情,代表你的目的,Android 寻找一个合适的组件来响应这个Intent,如果需要会启动这个组件一个新的 实例,并传递给这个Intent对象。后面会有详细的介绍,在此只需有大致印象即可。组件通过intent 过滤器通告它们所具备的功能——能响应的Intent类型。

第一个过滤器——

1. <action android:name="android.intent.action.MAIN" />

2. <category android:name="android.intent.category.LAUNCHER" />

复制代码

是最常见的。它表明这个 activity 将在应用程序加载器中显示,就是用户在设备上看到的可供加载的应用程序列表。换句话说,这个 activity 是应用程序的入口,是用户选择运行这个应用程序后所见到的第一个 activity。

1.3Android 程序的执行流程分析

经过前面对 Android 项目目录结构的介绍,以及相关文件的讲解,我们对许多细节已经有所了解,只是 Android 程序是如何执行的呢?下面做一个总结。

发布程序到手机上之后,当双击“抽屉”里该应用的图标时,系统会将这个点击事件包装成一个Intent,该Intent包含两个参数

{action :"android.intent.action.MAIN",

category :"android.intent.category.LAUNCHER" },

这个Intent被传递给HelloWorld这个应用之后在应用的功能清单文件中寻找与该Intent匹配的Intent过滤器,如果匹配成功,找到相匹配的Intent过滤器所在的Activity元素,再根据 <activity>元素的“name”属性来寻找其对应的Activity类。接着Android操作系统创建该Activity类的实例对象,对象创建完成之后,会执行到该类的onCreate方法,此OnCreate方法是重写其父类Activity的OnCreate方法而实现。onCreate方法用来初始化Activity实例对象。如下是HelloWorld.java 类中onCreate方法的代码。

1. @Override

2. public void onCreate(Bundle savedInstanceState) {

3.   super.onCreate(savedInstanceState);

4.   setContentView(R.layout.main);

5. }

复制代码

其中super.onCreate(savedInstanceState)的作用是调用其父类Activity的OnCreate方法来实现对界面的画图绘制工作。在实现自己定义的Activity子类的OnCreate方法时一定要记得调用该方法,以确保能够绘制界面。

setContentView(R.layout. main)的作用是加载一个界面。该方法中传入的参数是 “R.layout. main”,其含义为R.java类中静态内部类layout的静态常量main的值,而该值是 一个指向res目录下的layout子目录下main.xml文件的标识符。因此代表着显示main.xml所定义的画面。

关于Activity类的执行流程及其生命周期会在后面的部分详细讲解。

Android程序执行的整个序列图如下所示。

clip_image001[10]clip_image012

下载 (30.84 KB)

2011-1-16 22:51

1.4修改 HelloWorld 项目的图标

通过上面的介绍,我们对 HelloWorld 项目的组织结构已经有所了解。我们可以对项目内容进行简单的修改,实现图标改变,以及显示内容的改变。

我们该如何修改应用的图标为我们前面加入工程的“sharpandroi.png”图标呢?方法如下:修改功能清单文件中<application>的“icon”属性为“sharpandroid”在 R.java 中的引用路径,按照上面的引用语法,写法为“@drawable/ sharpandroid”,修改后的功能清单

中的<application>元素内容如下。

1. <application android:icon="@drawable/ sharpandroid "

2. android:label="@string/app_name">

复制代码

现在我们再次发布程序到 AVD 上,观察图标是否改变。返回主界面,点击 clip_image001[11]clip_image013

下载 (2.39 KB)

2011-1-16 22:54

拉开“抽屉”,看到“抽屉”中“第一个Android应用”的图标变成如下样式。 如下图:

clip_image001[12]clip_image014

下载 (55 KB)

2011-1-16 22:55

clip_image001[13]clip_image015

posted on 2014-03-08 20:50  zhuxuekui3  阅读(840)  评论(0编辑  收藏  举报