
2.4 创建第一个Android应用程序
2.4.1 创建HelloWorld工程
启动Android Studio,依次选择File | New | New Project,将会出现如图2.13所示的界面。在Application name中输入项目名称“HelloWorld”,在Company Domain中输入“android.introduction”,系统会自动生成包名为“introduction.Android.helloWorld”,Project Location指定工程文件存放的位置。单击“Next”按钮,出现如图2.14所示的界面,用于选择应用运行的系统版本。选择运行平台为“Android 7.0”,再次单击“Next”按钮,进入创建Activity界面,如图2.15所示。该界面可以添加多种Activity的模板,本次添加一个基本的Activity即可,选择“Basic Activity”,单击“Next”按钮,进入如图2.16所示的界面,指定Activity的相关信息,例如Activity的名字、布局文件的名字、菜单资源的名字以及Activity上显示的标题。此处使用默认设置,不做更改。设置完成后,单击“Finish”按钮完成工程的创建。

图2.13 创建HelloWorld工程

图2.14 选择应用系统平台

图2.15 创建Activity

图2.16 指定Activity的相关信息
Android Studio会根据刚才指定的相关信息生成相关模板代码,用户无须编写任何一行代码,该工程就可以运行。按Shift+F10快捷键,选择要运行的AVD,可查看运行效果,如图2.17所示。

图2.17 运行效果(效果图颜色可在下载资源中查看)
2.4.2 相关代码
双击HelloWorld工程中的MainActivity.java,该文件中已有程序代码如下:

MainActivity.java中的代码比较简单,表明类MainActivity继承了AppCompatActivity类,并重写了onCreate()方法。
AppCompatActivity类是Android Studio中默认的构建自定义Activity的模板类,与Eclipse+ADT环境中默认使用的Activity相比,AppCompatActivity提供了对工具栏ToolBar的支持,相关代码如下:

在MainActivity的onCreate()方法体中调用了父类的onCreate()方法,然后调用setContentView()方法显示视图界面。Android工程中使用XML文件来设计视图界面,R.layout.activity_main是Android工程中默认的布局文件的名字,即activity_main.xml。
Activity_main.xml的内容如下:

CoordinatorLayout布局是support v7系统新增的布局,具有便于调度协调子布局的特点。该布局可看作是增强版的FrameLayout,通常与ToolBar和FloatingActionButton合用。
ToolBar是图2.17中显示HelloWorld的蓝色工具栏,具有承载系统菜单的功能。布局相关代码如下:

FloatingActionButton是图2.17中右下侧的邮箱图标的按钮,布局相关代码如下:

在MainActivity.java中,FloatingActionButton的事件处理代码为:

该代码实现的功能是,当点击按钮时,显示“Replace with your own action”。
<include layout="@layout/content_main" />
这行代码将content_main.xml的布局嵌入activity_main布局中。content_main.xml的代码为:

该文件中的代码表示当前的布局文件使用LinearLayout布局,该布局中仅有一个TextView组件用于显示信息,显示的内容为“Hello World!”。
Android Studio鼓励用户将所有组件放置到content_main.xml中,而对activity_main中的代码尽量不做修改。
为了简化代码,降低阅读难度,在本书的范例程序代码中,除非需要用到工具栏和悬浮按钮,都会将.java文件和.xml文件中的ToolBar和FloatingActionButton的相关代码移除掉,并且直接使用单个布局文件搭建界面,避免使用include将一个布局嵌入另一个布局中。
2.4.3 工程文件结构解析
没有书写一句程序代码,一个Android应用便创建成功了,但是这只是一个简单的Android应用,要创建更多的Android应用,还要详细地了解Android应用程序结构。
Android Studio的Project工程文件结构如图2.18所示。

图2.18 Android Studio工程文件结构
主要目录的作用如下。
• .gradle目录:Gradle在构建工程的过程中生成的文件。
• .idea目录:Android Studio生成的工程配置文件,类似Eclipse的project.properties。
• build目录:相当于Eclipse工程的bin目录,用于存放生成的文件,包括APK。
• gradle目录:用于存放Gradle构建工具系统的JAR和Wrapper等,以及配置文件。
• External Libraries:工程依赖的LIB文件,如SDK等。
• app目录:Android Studio创建工程中的一个Module,是程序开发者的主要工作目录。app目录下的结构如图2.19所示。

图2.19 app目录结构
下面分别介绍各个目录或文件的作用。
• src。该目录(文件夹)中包含应用程序的所有源代码。在src文件夹中可以创建若干Java包,在包中可以创建应用的处理逻辑以及应用的Activity,MainActivity.java就是在创建项目的时候创建的一个Activity,在Activity中可以编写控制View的逻辑。
• build。该目录(文件夹)的source包中有一个“R.java”文件。R类中包含4个静态内部类:attr、drawable、layout和string,分别代表属性、图片资源、布局文件及字符串的声明。R.java文件是资源索引类,由Eclipse自动生成,开发者不用去修改和维护里面的内容,但是这个文件却非常有用,它和res文件夹紧密相连,对res下资源的操作都会导致R.java文件的重新编译。R.java中定义的常量类也可以间接帮助Activity完成对资源的应用。Android这样设计的好处是使得复杂的资源通过专门的类来管理而让程序中的代码变得整齐、强壮,并且减少程序出错和bug的产生。
• assets。该目录(文件夹)中通常放置一些原始资源文件,它会在Android打包的时候原封不动地一起打包,安装时会直接解压到对应的assets目录中。这里通常放置一些项目中用到的多媒体资源等。
• res。目录(文件夹)中放置的是Android要用到的各种程序资源。其中,常见的子文件夹有drawable、layout、values等。其中,drawable目录放置应用到的图片资源;layout目录放置一些与UI相关的布局文件,都是以XML文件方式保存;values目录中放置的是一些字符串、数组、颜色、样式和动画等资源,values目录中的每一个文件都会转化成R.java中的一个静态类,文件中的每一个资源都会转化成R.java中对应静态类的静态整型常量,这样Activity中通过一个解析器就可以获取对应的资源。
• AndroidManifest.xml。这个文件是整个项目的配置资源,里面配置的内容包括当前应用程序所在的包、应用程序中的Activity、应用程序的访问权限等。