Building Your First App(构建你的第一个应用程序)

欢迎来到android应用开发,这节课将教你怎样开发自己的第一个app。你将能学会怎样创建一个android工程,并且调试一个android应用,你也可以学到一些基本的android app的设计,包括一些简单的用户界面和处理用户的输入。
在开始这节课之前,请确定你已经搭建了开发环境。你需要以下步骤:
1.下载android SDK
2.安装Eclipse的ADT插件(如果你使用的是Eclipse开发)
3.下载最新的SDK tools和使用SDK Manager平台
如果你已经完成了这些,下载SDK和按照步骤安装,直到你完成了环境的搭建,你就可以准备开始这节课了。
这节课将通过一个规范的教程,建立一个简单的android app来教你一些android 开发的基本概念,所以每一步对你来说都是很重要的。
开始第一节课了。

Creating an Android Project(创建一个Android工程)

一个Android工程包含的所有文件里包括你的app源码。Android SDK目录可以很容易的建立一个新的Android工程,这个默认的工程是由一些目录和文件组成的文件。
这节课教你怎样建立一个新的Android工程,不仅要使用Eclipse(要有ADT插件)还要从命令行使用SDK 工具。
注:你需要安装号Android SDK,如果你使用Eclipse,你需要安装号ADT插件(目前最高版本21.0.0),如果你没有做好这些,在你开始学习这节课之前,请你根据指导下载Android SDK。
1.Create a Project with Eclipse(用Eclipse创建一个工程)
1.点击工具栏的New
2.等到窗口出现,点击Android这个文件夹,选择Android Application Project,在点击Next
3.会出现以下的界面:

  • Application Name:app的名字,就是显示给用户看的。对于这个工程,使用 My First App 这个名字。
  • Project Name:这个名字就是你的工程目录的名字,显示在Eclipse的上的名字。
  • Package Name:应用的包的命名空间(在java的编程语言中,使用跟包名一样的命名规则),你的包名必须要唯一,跟Android系统中的所有包名都不一样。基于这个原因,最好的做法是将你公司或者机构的名称倒过来写就可以了。例如这个工程,你能使用像这个com.example.myfirstapp包名,然而,你不能在google play上发布这个app,因为google已经使用了com.example 这个命名空间。
  • Minimum Required SDK:你的app支持的最低android 版本,表明使用的是这个API版本。为了要尽可能的支持更多的设备,你应该设置一个可用的最低版本,允许你的app可以把它作为核心的功能集。如果你的核心只有在新的android版本上是合适的,给你的app设置这个核心不是危险的,你能够在支持它的设备上运行运行这个版本,通过这个核心是可以的(讨论支持不同的平台版本)。工程中设置了这个默认值。
  • Target SDK:能够测试你应用程序的最高android版本(也是使用的API等级)
  • Complie With:在这个平台版本上编译你app。默认的是你sdk可用的最低android版本(它应该是android 4.1或者更高的,如果你没有获得版本,你必须要在SDK Manager安装一个)。你可以用一个老版本建立一个app,但设置的最新版本的构建目标,让您能够实现新功能,优化app,为一个好的用户体验上的最新设备。
  • Theme:指定android UI 风格应用在你的应用程序。也可以不用管它。
    然后点击Next。

4.在下一个屏幕上是配置这个工程的,可以默认选择的,然后点击Next。
5.在下一个屏幕上帮助你个你的应用程序创建一个启动的icon图标。你能够通过几种方法定制这个图标,通过图标生产工具生成的图标适配所有的屏幕密度。在你发布你的应用程序以前,你要确保你的图标规格在按照Iconography设计规范来的。然后点击Next。
6.现在你能选择一个Activity模版,在你开始构建你的应用程序。对于这个工程,选择BlankActivity ,然后点击Next。
7.在他们默认的状态下,离开Activity的详情界面,然后点击Finish。
你现在已经构建了你的Android 工程,里面有默认的文件组成的,你可以开始编写你的应用程序了。继续下一接课程吧!
2.Create a Project with Command Line Tools(通过命令行构建一个工程)
如果你使用的是Eclipse IDE 和ADT 插件,你能够通过它代替通过命令行使用SDK工具构建一个工程。
1. 改变目录,进入到Android SDK tools路径下。
2. 执行 android list targets
在控制台输出获取到的Android平台列表,你已经下载的Android SDK。找到你想编译你的应用程序的这个平台,记下目标的ID,我们推荐你尽可能的选择高版本。你能够构建你的应用程序在老版本上,通过设置 最新的版本来构建你的应用程序,你可以在最新的设备上优化你的应用程序。
如果你没有看见目标列表,你需要安装和使用Android SDK Manager工具,请看Adding Platforms and Packages.
3. 执行 android create project –target –name MyFirstApp \
path /MyFirstApp –activity MainActivity \
package com.example.myfirstapp
通过目标列表中的ID来替换,你想保存你的Android工程的位置来替换
你现在已经构建了你的Android 工程,里面有默认的文件组成的,你可以开始编写你的应用程序了。继续下一接课程吧!
Tip: 添加platform-tools,最好是在你的环境变量中加入tools目录。

Running Your Application(运行你的应用程序)

如果你根据前面的工程创建了一个Android工程,它包含了默认的Hello World的源文件,你可以立即运行你的应用程序。
怎样运行你的应用程序依赖两件事:你是否有Android系统的设备和你是否使用Eclipse,这节可叫你怎样安装和运行你的应用程序在真正的设备上和在Android模拟器上,它们都可以在Eclipse和命令行工具下进行。
在你运行你的应用程序以前,你应该意识到你Android工程有哪些目录和文件:

  • AndroidManifest.xml
    manifest文件描述了组成应用程序的几个组件的基本特征,通过阅读更多的训练课程,你可以学习到多种文件的声明。
    元素是manifest文件中最重要的元素之一,通过使用android:minSdkVersion和android:targetSdkVersion属性,声明了应用程序兼容不同的Android版本。对于你的第一个应用程序,它应该像这样的:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />    ...</manifest>

建议总是把android:targetSdkVersion设置为最高版本,用来在相对应的平台版本上测试应用程序。更多信息,请阅读 Supporting Different Platform Versions。
- src/
这个目录用来存放应用程序的主要源代码。默认的,它包含了通过使用应用程序图标启动的Activity的这个类。
- res/
是应用程序的资源,包含了几个子目录。这儿有一些:
- drawable-hdpi/
这个目录存放图片对象(像Bitmap),计划给高密度的屏幕用的。不同密度的屏幕相对应不同目录下的图片文件。
- layout/
这个目录的文件是应用程序的用户界面(UI)
- values/
这个目录是其他的XML文件,包含了一些需要的资源文件,像string和color的定义。

当你构建并运行应用程序的时候,这个默认的Activity类被启动并加载布局文件说“Hello World”,这个结果一点也不令人激动,但是很重要,在你的开发中你明白怎样运行应用程序。

Run on a Real Device(在真机上运行)

如果你有一个Android系统的设备,这儿教你安装并运行应用程序:
1. 插上USB数据线在你开发的时候。如果是Widows,可能需要安装USB驱动。关于安装驱动,请看OEM USB Drivers文档。
2. 在设备上使用USB调试。

  • 如果是Android3.2的设备,或者是更早的版本,请在机器上找到以下的选项Settings > Applications > Development。
  • 如果是4.0或者是更新的请进入到Settings > Developer options(开发者选项)。
  • Note:在4.2或者更新的版本上, Developer options默认是隐藏的。为了让它可用,进入Settings > About phone,然后轻按Build number(版本号)七次。然后返回前一个屏幕,找到Developer options。

然后在Eclipse上运行应用程序:
1. 打开工程文件,然后在工具栏点击Run图标。
2. 在出现的窗口中点击Run as,选择 Android Application,点击OK。
Eclipse会在你连接的设备上安装并打开应用程序。
或者在命令行运行应用程序:
1. 改变目录到Android工程的根目录下并运行:
adb debug
2. 确保你PATH的环境变量中包含了Android SDK platform-tools/ 这个目录。然后执行:
adb install bin/MyFirstApp-debug.apk
3. 在你的设备上,定位并打开MyFirstActivity。
你可以在设备上构建并运行应用程序了!开始开发,请继续下一节课。

Run on the Emulator(在模拟器上运行)

不管你使用Eclipse还是命令行,都可以在模拟器上运行应用程序,你需要创建一个Android Virtual Device (AVD)安卓虚拟设备。一个AVD设备的配置,允许通过创建不同模型的安卓虚拟设备。
创建AVD:
1. 运行Android虚拟设备管理器
在Eclipse中,点击工具栏的 Android Virtual Device Manager。
在命令行中,改变目录到/tools/ 并执行: android avd
2. 出现Android虚拟设备管理器面板,点击New。
3. 进入到AVD详情,取名,目标版本号,SD卡的大小,显示屏(HVGA为默认)
4. 点击Create AVD。
5. 从Android虚拟设备管理器选择新的AVD,点击Start。
6. 等模拟器启动过后,解锁模拟器屏幕

然后在Eclipse上运行应用程序:
1. 打开工程文件,然后在工具栏点击Run图标。
2. 在出现的窗口中点击Run as,选择 Android Application,点击OK。
Eclipse会在你连接的设备上安装并打开应用程序。
或者在命令行运行应用程序:
1. 改变目录到Android工程的根目录下并运行:
adb debug
2. 确保你PATH的环境变量中包含了Android SDK platform-tools/ 这个目录。然后执行:
adb install bin/MyFirstApp-debug.apk
3. 在你的设备上,定位并打开MyFirstActivity。
你可以在设备上构建并运行应用程序了!开始开发,请继续下一节课。

Building Your Simple User Interface(构建简单的用户界面)

图解在应用程序的用户界面View和ViewGroup的层级。View对象是常用的UI组件,比如按钮或者文本域。ViewGroup对象是看不见的,它包含了怎样定义子View的布局排放,比如一个垂直的网格列表…
Android提供了一个XML格式View个ViewGroup的子类实现,通过在XML中使用层级的UI元素。
ViewGroup对象的一个分支可以包含了View对象的。
在这节课中,你将创建一个XML布局文件包含了一个按钮和文本域。根据这节课,你将知道当按钮被按钮,发送文本域的内容到另一个Activity。

Create a Linear Layout(构建一个线性布局)
在res/layout/目录下打开activity_main.xml这个文件。
在Eclipse中,打开这个文件,可以展现图形编辑界面,使用WYSIWYG工具,它可以帮助你构建布局。关于这节课,你要进入XML目录下工作,点击屏幕底下activity_main.xml标签,开始编辑XML。
这个BlankActivity模版,在你选择构建Android工程的时候,就已经包含了 activity_main.xml文件,它是有RelativeLayout根View和TextView子View组成的。
首先,删除TextView子元素,改变RelativeLayout元素为LinearLayout,然后添加android:orientation属性,设置值为:horizontal。结果如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" ></LinearLayout>

LinearLayout是一个ViewGroup(ViewGroup的子类),它里面的子View可以是垂直的或者是水平方向的,是android:orientation这个属性来指定的。Linearlayout在屏幕上出现的顺序就是在XML出现的一样。
有两个其他的属性, android:layout_width和android:layout_height,这个是用来要求指定所有View的大小。
因为Linearlayout在这个布局中是一个根View,对于应用程序来说,应该是充满屏幕的,所有宽和高应该设置为 “match_parent”。这个值声明了它的宽和高将根据父View的宽和高来一直扩展的。
关于更多的布局属性,请看Layout Guide。

Add a Text Field
创建一个用户编辑的文本域,在Linearlayout中加入一个EditText元素。
像每一个View对象一样,必须要给EditText对象指定某些属性。

 <EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit_message" />

Add String Resources

当你需要在用户界面添加一个发短信的文本的时候,你需要指定一个string作为资源文件。string资源文件可以在单一的位置来管理所有UI上的文本,你可以更简单的找到和更新他们。另外,通过定义不同的string还可以支持不同的语言在应用程序上。
默认的,Android工程包含的string文件,在res/values/strings.xml下。添加一个新的字符名字为:edit_message,设置值为Enter a message(你能够删除hello_world这个string)。
string.xml结果应该如下:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">My First App</string>    <string name="edit_message">Enter a message</string>    <string name="button_send">Send</string>    <string name="menu_settings">Settings</string>    <string name="title_activity_main">MainActivity</string></resources>

对于用string资源文件来支持多语言的更多信息,请看 Supporting Different Devices class。

Add a Button

<Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" />

宽和高都是wrap_content,所有这个按钮的大小就是按钮文字的大小了,这个按钮不需要android:id这个属性,因为在activity的代码中不需要引用它。

Make the Input Box Fill in the Screen Width

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">    <EditText android:id="@+id/edit_message" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="@string/edit_message" />    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" /></LinearLayout>

这个布局是提供给你第一次构建工程的时候,SDK默认帮你生成的Activity用的,所有你能够运行应用程序看见结果。
继续下一节课,学习按住button,读取到文本域的内容,打开另一个Activity。

Starting Another Activity(打开另一个Activity)

完成了前面的课程,你有一个应用程序,在单一的额屏幕上显示一个文本域和按钮。在这节可,你将在 MainActivity添加一些代码,打开一个新的Activity,但你点击Send这个按钮的时候。

Respond to the Send Button

回应按钮的点击事件,打开activity_main.xml 布局文件,给Button元素添加android:onClick 属性。

<Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" />

android:onClick这个属性的值是sendMessage,在activity中它的名字是一个方法,当用户点击这个按钮时系统的回应。
打开MainActivity这个类,添加对应的方法:

/** Called when the user clicks the Send button */public void sendMessage(View view) {    // Do something in response to button}

它要求你导入View这个类:

import android.view.View;

系统为了把这个方法给android:onClick名字为方法的,它必须是显示的(public)。特别的,需要一下指定:

  • 为public
  • 返回值为void
  • 只有一个参数View(这个View是用来单击的)
    下一步,你将能在这个方法中,实现读取文本域内容,开启另一个activity。

Build an Intent

Intent是一个对象,提供给运行时两个分开的额组件用的(比如两个Activity)。Intent代表这应用程序做某些事的意图。你能够使用Intent在各种各样的任务的时候,但是更多的时候是用来打开另一个activity。
它的构造类型可以使用两个参数:

  • 第一个参数是Context,可以用this,因为Activity是Context的子类
  • Class是应用程序组件,应该实现Intent中的class。
Intent intent = new Intent(this, DisplayMessageActivity.class);EditText editText = (EditText) findViewById(R.id.edit_message);String message = editText.getText().toString();intent.putExtra(EXTRA_MESSAGE, message);

一个Intent可以携带各种各样的键值对形式的参数,putExtra()方法,第一个参数是key的名字,第二个参数就是值。
为了让下一个程序可以查询到携带的数据,你需要给意图的extra一个常量key。
定义key的一个好的练习,就是使用应用程序的包名作为前缀,这样确保他们是唯一的,为了应用程序不影响其他的应用程序。

Start the Second Activity

为了打开另一个activity,通过意图调用startActivity()方法,系统将接受并打开通过意图指定的activity。

/** Called when the user clicks the Send button */public void sendMessage(View view) {    Intent intent = new Intent(this, DisplayMessageActivity.class);    EditText editText = (EditText) findViewById(R.id.edit_message);    String message = editText.getText().toString();    intent.putExtra(EXTRA_MESSAGE, message);    startActivity(intent);}

Receive the Intent
每一个activity都是通过Intent来唤醒的,不管用户如何操作。你能够得到这个意图(Intent),在你Activity被打开的时候,通过getIntent()方法。

Intent intent = getIntent();String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

Display the Message

@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    // Get the message from the intent    Intent intent = getIntent();    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);    // Create the text view    TextView textView = new TextView(this);    textView.setTextSize(40);    textView.setText(message);    // Set the text view as the activity layout    setContentView(textView);}

已经构建你的第一个应用程序!下一节课,管理Activity的生命周期~

更多相关文章

  1. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  2. Android(安卓)- Manifest 文件 详解
  3. Android之应用程序基础
  4. android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
  5. Android四大组件的理解
  6. Android官方入门文档[1]创建一个Android项目
  7. 第三章 Android程序设计基础
  8. Ionic 运行报错No resource identifier found for attribute 'ap
  9. android 开机直接运行app并当做手机桌面

随机推荐

  1. Android(安卓)情景模式的设置
  2. Android中EditText隐藏/自动弹出输入法的
  3. [转]Android高手进阶教程(四)之----Andro
  4. Android 文件路径详解
  5. Android(安卓)编程:calledfromWrongThread
  6. Android基础笔记(六)-网络编程
  7. Android开发入门必知:应用界面组成
  8. Android(安卓)Web App官方文档翻译第一章
  9. Android Button及TextView动态变换颜色
  10. Android8.1 Launcher3 去掉抽屉(三)