集册 Android SDK 教程 应用程序结构

应用程序结构

—— Android SDK 上手指南:应用程序结构

欢马劈雪     最近更新时间:2020-08-04 05:37:59

151

打开 Eclipse 并在 Package Explorer 当中查找我们已经创建完成的项目。在“src”文件夹里,大家应该会看到设置项目所命名的项目包。包中应该包含我们的 Activity 类文件,这也是要在编辑器中打开的内容。源文件夹保存着我们在开发 Android 应用程序时所要用到的全部 Java 文件。

介绍

本教程将主要以探索与了解为主要目的,但后续的系列文章则将进一步带大家深入学习如何创建用户界面、响应用户交互操作以及利用 Java 编排应用逻辑。我们将专注于大家刚刚开始接触 Android 开发时最常遇到的项目内容,但也会同时涉及一部分已经存在于应用结构当中的其它一些元素。在今天的文章中,我们不会对这些额外元素进行深入探讨。总而言之,了解关于 Android 应用的基础创建知识,这就是我们今天要完成的教学任务。

1. 源

第一步

打开 Eclipse 并在 Package Explorer 当中查找我们已经创建完成的项目。在“src”文件夹里,大家应该会看到设置项目所命名的项目包。包中应该包含我们的 Activity 类文件,这也是要在编辑器中打开的内容。源文件夹保存着我们在开发 Android 应用程序时所要用到的全部 Java 文件。

每当我们创建一个项目时,都会创建一个用于容纳各 Java 类文件的包。一款应用程序可能拥有不止一个包,而且每个包当中也可能容纳着多个类文件。这些类文件中的处理代码能够将我们的应用呈现给用户、响应用户的交互操作并执行任何的必要处理。从实质上看,类文件是在根据面向对象概念模型划分与应用程序相关的代码。

我们将在后续文章中进一步讨论关于 Java 的概念以及对应实践。在今天的教程内,大家只需理解一个 Java 应用会将各类处理任务拆分成一定数量的对象。每个对象都由一个类声明来定义,这在应用程序中通常是一个独立的文件,不过也可以被嵌套在其它类文件当中。一个对象基本上就是一大段代码,其中承载着与应用程序相关的某项功能的一部分。类文件中的代码能够引用应用程序中的其它类或者应用程序中的其它包。

在大家着手进行应用程序开发时,首先需要向源文件夹中的包中添加 Java 类。一个向用户提供用户界面的典型 Android 应用将拥有至少一个 Activity 文件,应用中的不同屏幕显示内容还要用到更多 Activity 类。其它一些类型的应用,例如工具程序或者服务,则采用不同的结构。大家最好首先关注 Activity UI 这种类型的应用程序,并在熟练掌握之后再接触其它应用类型。

第二步

现在查看新应用中的 Activity 类文件。我们会在本系列教程的后续文章中进一步探讨 Activity 代码,因此目前大家不用太过关注细节。今天我们主要面向应用中的主 Activity,它会在应用启动后同时开始生效。大家的应用也可能会启动其它一些用于用户交互的 Activity。在我们创建自己的项目时,Eclipse 会对应用进行设置并将主 Activity 作为主类——它在项目清单当中也将被作为主 Activity 进行显示,我们稍后会看到。

在主 Activity 类当中,大家会看到 onCreate 方法,其中包含的代码将在 Activity 被创建——也就是应用程序启动时开始执行。在该方法中,大家会看到以下代码行:

setContentView(R.layout.activity_main);

在我们启动项目之后,这一行的内容用于指定我们所创建的布局文件,告诉 Android 将其作为内容视图。这意味着无论布局文件中包含什么样的内容,都将在该 Activity 显示在屏幕上时呈现给用户。

我们将在稍后进一步探讨相关话题,目前暂时需要将注意力集中在“R.layout.activity_main”语法上。这就是我们的 Java 代码引用应用程序资源的方式。我们将利用类似的语法通过资源的 ID 值对其进行引用,例如图片及数据值等资源也可以通过这种方式实现引用。其中的“R”代表应用资源,后面的部分则用于指定保存在“res/layout”目录下的条目类型——在这里就是布局。这些资源最终要根据其名称进行识别——对于示例中的布局,使用的就是文件名。由此推断,我们要使用的语法就成了“R.type.name”。在我们开始编程之后,各位就会开始使用该语法。

在本系列的后续文章中,我们将向 Activity 类文件中添加代码以实现用户交互。现在打开应用中的“res”文件夹,大家会在其中找到多个子文件夹。这些文件夹是由 Eclipse 与 ADT 在我们启用新 Android 项目后默认创建而成的,不过我们可能还需要为不同类型的资源添加其它一些目录。

2. 布局资源

正如我们已经看到,项目创建后所生成的布局文件会保存在“res/layout”文件夹中。如果某款应用拥有多个 Activity 屏幕,那么一般会为每个屏幕保留一个独立的布局文件。大家可能还会将布局文件用于个别 UI 条目。当大家为 Activity 创建类文件时,需要如上所述利用 setContentView 进行布局设置。除此之外,大家也可以通过 Java 代码进行布局设置——这算是种备选方案。在我们的示例中,布局设置是在应用执行时动态生成的。不过利用 XML 的优势在于,我们可以在界面设计工作中直观感受布局方案的视觉效果。

在应用程序的主布局文件当中(现在应该已经用编辑器打开了),大家会看到 XML 结构。如果各位之前没有接触过 XML 也不必担心,我们会在后续文章中进一步讨论这些基础知识。就目前来说,大家只需了解:XML 是一种标记语言,类似于 HTML——如果之前接触过 Web 开发的话。XML 文件利用树状结构作为数据模型。通常来说,一个布局文件拥有一个根布局元素,并将其作为特定布局类型模型——其中所包含的用于 UI 条目的子元素则包括按钮、图片及文本等。

3. 可绘制资源

大家在资源目录下应该会看到多个在名称中包含“drawable”字样的文件夹,这些文件夹用于保存应用程序所使用的图片文件。这些图片文件可以是我们在 Eclipse 之外所准备的数字图片文件,格式包括 PNG 或者 JPEG 等。或者,大家也可以通过 XML 代码来描述形状、颜色以及外观,从而定义特定可绘制资源。一旦我们在 drawable 文件夹中创建了文件,就可以在应用布局文件或者 Java 代码中进行引用。这样一来,之前准备好的视觉元素就能用于应用 UI 了。

资源目录中会保留针对每一种密度桶的 drawable 文件夹。这些密度桶是各类运行 Android 系统的设备在像素密度方面的通用型分类依据。具体类别分为低、中、高、超高与超超高密度四种。只需从对应类型中作出选择,我们就可以在密度桶的帮助下轻松简化多屏幕密度的支持过程。这意味着当我们在项目中包含图片文件时,可以将其放置在不同密度的文件夹当中,并通过裁剪提供满足各种密度方案的版本。

4. 数据资源

在“res”目录中,我们会看到一些标题中带有“values”字样的文件夹。这些文件夹用于容纳大家希望在应用程序中所使用的数据值。这些值可以包含文本字符串以及数字。包含 XML 文件的值文件夹会列出其中的一项或者多项值。每份列表都包含一个名称以及内容中的值。应用中的其它文件,例如 Java 类或者布局文件,能够通过这些名称为引用这些值。在典型用例中,我们能够需要通过这些保存在文本字符串的值在 UI 元素当中显示内容——例如按钮。

应用程序中的不同值文件允许大家针对特定屏幕尺寸及 API 级别对值进行修改。如果同样的值足以应对多川设备,则可以被直接保存在“Values”文件夹内。

5. 清单

在查看应用程序中的主文件夹时,大家一定会发现项目的清单文件。通过双击即可利用编辑器将其打开。接下来,我们会看到一个显示其内容的图形界面。点击编辑器窗口底部的“AndroidManifest.xml”标签来查看其 XML 代码。这个文件将应用程序的各个方面定义成统一整体。Eclipse 与 ADT 会在我们创建应用的同时,在清单中创建特定元素,具体创建方式取决于大家在项目创建过程中的设置。大家可以手动向清单中添加其它元素,例如添加其它 Activity。

我们将运行其中的一部分主元素,旨在理解清单的作用,不过还有其它多种元素可以被包含其中。在清单中所列举的新应用项目元素当中,我们将看到 uses-sdk 元素,我们利用它表示最小及目标 API 级别。Application 元素中包含指向启动机制与应用程序名称的属性。在 application 元素中还存在着一个 activity 元素,会在应用程序开始运行时通过 intent-filter 元素作为主 Activity 启动。当我们向应用中添加新的 Activity 时,则会为每个相关元素添加新的 activity 元素。

大家可能还需要向清单中添加其它元素,其中包括 uses-permission 元素,用于罗列应用所要求的权限——用户会在安装应用之前观看到该列表。权限中包含多种操作条目,例如通过互联网获取数据、写入存储或者访问设备上的其它功能——如相机。清单还会列举应用程序所能支持的设备类型以及其它一些应用程序组件(例如后台服务)。

6. 其它文件

讲到这里,我们已经谈到了大家需要了解的 Android 应用程序项目结构中的各大主要方面。随着对 Android 开发的学习,大家将在今后经常与这些内容打交道。通过 Eclipse,我们还会看到项目中包含的其它一些文件及目录,不过就目前来说基本都可以直接忽略。

展开阅读全文