欢迎来到android应用开发,这节课将教你怎样开发自己的第一个app。你将能学会怎样创建一个android工程,并且调试一个android应用,你也可以学到一些基本的android app的设计,包括一些简单的用户界面和处理用户的输入。
在开始这节课之前,请确定你已经搭建了开发环境。你需要以下步骤:
1.下载android SDK
2.安装Eclipse的ADT插件(如果你使用的是Eclipse开发)
3.下载最新的SDK tools和使用SDK Manager平台
如果你已经完成了这些,下载SDK和按照步骤安装,直到你完成了环境的搭建,你就可以准备开始这节课了。
这节课将通过一个规范的教程,建立一个简单的android app来教你一些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.会出现以下的界面:
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目录。
如果你根据前面的工程创建了一个Android工程,它包含了默认的Hello World的源文件,你可以立即运行你的应用程序。
怎样运行你的应用程序依赖两件事:你是否有Android系统的设备和你是否使用Eclipse,这节可叫你怎样安装和运行你的应用程序在真正的设备上和在Android模拟器上,它们都可以在Eclipse和命令行工具下进行。
在你运行你的应用程序以前,你应该意识到你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调试。
然后在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。
你可以在设备上构建并运行应用程序了!开始开发,请继续下一节课。
图解在应用程序的用户界面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。
完成了前面的课程,你有一个应用程序,在单一的额屏幕上显示一个文本域和按钮。在这节可,你将在 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)。特别的,需要一下指定:
Build an Intent
Intent是一个对象,提供给运行时两个分开的额组件用的(比如两个Activity)。Intent代表这应用程序做某些事的意图。你能够使用Intent在各种各样的任务的时候,但是更多的时候是用来打开另一个activity。
它的构造类型可以使用两个参数:
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
@Override
public 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的生命周期~