原文作者Felix Geilert
介绍
本教程是开发Android应用程序的基础文章。它将解释的Android软件开发工具包,以及如何使用Eclipse来开发。要理解本教程,您不必有任何Java编程的知识,通过本文章也可能有助于进一步理解面向对象编程基础知识。本教程介绍Android的初学者如何在Eclipse中创建一个Android项目,编辑资源文件,并且增加一些代码。
设置Eclipse和Android SDK
如果你还没有一个开发Android应用程序环境,请参照此链接中的说明。
提示:路径是指PATH环境变量。在Windows中,在“控制面板/系统/高级系统设置/环境变量”列表框中设置。您可以通过java -version命令行检查已安装的Java版本。
让我们开始
现在,我们要创建我们的第一个应用程序,这是一个Hello World应用程序。首先,启动Eclipse,然后选择“文件/新建/项目”。在“新建项目”对话框中,选择“Android/Android Project”,然后点击“下一步”。
在这里你需要设置该项目。首先,我们输入“Hello World”作为项目名称。接下来,您必须选择要使用的Android版本。在这里,我们选择2.2版本。正如我们在最后一栏看到的,我们需要设置这个Android API的版本为8,因此我们在Mini SDK版本中输入“8”。此外,该项目需要设置一个应用程序名字。 (注意,这个名称也会被使用在代码中,所以这个名字应该没有空格)。通常,您需要删除所有空格作为项目名称(例如,该项目的“HelloWorld”)。接下来,你必须定义该项目的Package。我们将在这里使用“com.test.helloworld”(一个包由多个类组合而成,有关详细信息,请参见这里)。最后,你需要设置Activity的名字(一个应用程序可能有多个活动)。在这个例子中,我们简单地用“HelloWorldApp”作为名字。
在我们最终开始我们的第一个项目之前,需要创建一个配置。此配置指明在何种情况下应用程序将被启动。例如,你可以控制的网络速度,模拟器和应用程序。此外,您可以选择不同的仿真器来测试不同的Android版本或不同屏幕尺寸。进入“运行/运行配置”来创建配置。现在点击“Android应用程序”在一旁选项卡上的新建按钮。调用新的配置“HelloWorldConfig”,选择浏览按钮并选择我们刚刚创建的项目。现在选择目标标签。在这里你可以选择网络速度和哪个模拟器将被使用。
接下来我们先创建一个模拟器。点击自动控制使边上的按钮可以使用,然后单击管理器按钮。在这里,点击右边的新建按钮来创建一个新的模拟器。在下面的屏幕上,你可以输入一个模拟器名称(我曾用“DefaultAndroidEmulator”),并指定的细节(如Android的版本,SD卡大小,等等)。您可以控制仿真器硬件部分的每一个小细节。
一旦你完成上面的步骤,点击“创建AVD”并关闭管理器窗口。现在,我们已经成功创建了运行配置。点击“应用”并关闭配置。现在你可以运行你的第一个Android项目了。
注意:这可能需要一段时间来起动仿真器,所以请耐心等待!另外,我只截了其中一部分,使你不能看到键盘或D-pad。
恭喜!你刚刚创建了第一个Android应用程序!
编码是一种乐趣
当我们完成了这一切,终于可以开始实际的代码开始,因为我们都知道:编码是一种乐趣!
但在此之前,我们实际上可以先看一下Java代码,我们需要了解Android应用程序结构。到Package Explorer并展开“Hello World”项目。你可以看到五个文件夹和两个文件。让我们开始使用其中的两个文件和AndroidManifest文件。该文件包含有关项目所有的信息,如图标,作者的名字。要打开它,请右键单击并选择“Open With/ Android Manifest Editor”。在展开的标签中,您可以指定包的名称和您的项目版本。在底部,你会发现一些额外的标签。我认为大部分的设置都是十分明了。请注意在某些属性前面的@。这说明下面的字符串是一个资源引用。您可以在“Res”文件夹中的找到资源。如果你展开它,你会发现还有一些子文件夹。具体而言,在res目录下可以有七种类型的子目录:values, drawable, layout, animations, xml, styles, 和raw。
让我们首先关注values文件夹。在这里你可以存储各种类型简单资源(如字符串,颜色,数量,尺寸,数组等)。默认情况下,你会发现有个strings.xml文件。当你打开它(右键点击,“Open With/ Android Layout Editor”),你会看到它包含两个值。第一个是项目运行时的输出文本,第二个是您的应用程序名称。当然您也可以添加新的值用于代码使用(或增加在Manifest或Layout文件中)。您也可以使用量词来创建使用特定资源。如增加一个 - 到文件夹,再添加一个量词到名字中。例如,你可以重命名values文件夹为values-en,这意味着该文件夹的内容只用于英文语言的Android手机使用。如果你不添加量词,资源是默认。默认资源会在当系统没有找到特定资源时加载。如果该项目已启动,所有的资源将被编译尽可能有效并添加到程序中包。此外,一个引用将被创建(称为R),允许你忙在代码中访问资源。由于这只是一个教程,我不会在这里专注所有类型的资源。你可以在这里找到更多的资源和量词。
最后,现在开始编码!转到“src”文件夹。在文件夹,你会发现package文件夹,打开HelloWorld.java文件。你将看到一个Android Activity的默认代码:
Collapse
package com.test.helloworld; //the package we are working in //some android packages we need to import import android.app.Activity; import android.os.Bundle; //our activity class (extendes the default activity class) public class HelloWorldApp extends Activity { /** Called when the activity is first created. */ @Override //the function called when activity is created public void onCreate(Bundle savedInstanceState) { //call the create fct. Of the base class super.onCreate(savedInstanceState); //load the layout specified in the layout.xml setContentView(R.layout.main); } }
正如你看到的,我们通过扩展默认的Android activity创建了一个新的activity类。然后我们重载默认的OnCreate函数,它是在项目启动时被调用。在那里,我们从资源文件加载我们自己的布局,并调用基类的OnCreate函数。现在,让我们来分析这个Layout文件。你先在资源文件夹下找到layout目录。当你打开它,它看起来应该像这样:
Collapse
<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" /> <textview android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/hello" /> </linearlayout />
您可以看到这个根节点叫LinearLayout.正如您可能已经知道的,这里有不同类型的Layout
:
FrameLayout
: 所有的控件(包括子控件)都放置在左上角.LinearLayout
: 所有的子控件都按照垂直/水平次序排列.RelativeLayout
: 子控件的位置都是相对于其它子控件.TableLayout
: 所有子项都是用网格来放置的.AbsoluteLayout
: 子元素的位置都是绝对坐标(像素)。
一旦你选择了一个布局类型,你可以添加子元素。在给定的代码中,已经有一个TextView,这是用来在屏幕上显示文字。当前内容是在values.xml文件中定义的一个资源引用。正如你将看到的,它使用整个屏幕宽度,但是长度只要按照需要显示内容来定。我们可能会开始与一些小的变化。让我们改变TextView的文字颜色为绿色:
Collapse
<textview android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/hello" android:textcolor="#FF00FF00" />
现在,启动项目就可以看到这个变化。接下来,让我们添加一个新的EditText控件:
Collapse
<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" /> <edittext android:layout_height="wrap_content" android:layout_width="fill_parent" android:textcolor="#FF0000FF" android:id="@+id/et_Text" /> <textview android:layout_height="wrap_content" android:layout_width="fill_parent" android:textcolor="#FF00FF00" android:id="@+id/lv_View" /> </linearlayout />
当我们想在代码中访问这个控件,需要分配一个ID。接下来,我们创建了一些控件相关的代码。转到HelloWorld.java文件。
Collapse
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //loading the layout over the resource reference setContentView(R.layout.main); //get the two controls we created earlier, also with the resource reference and the id final TextView tv_View = (TextView)findViewById(R.id.tv_View); final EditText et_Text = (EditText)findViewById(R.id.et_Text); //add new KeyListener Callback (to record key input) et_Text.setOnKeyListener(new OnKeyListener() { //function to invoke when a key is pressed public boolean onKey(View v, int keyCode, KeyEvent event) { //check if there is if (event.getAction() == KeyEvent.ACTION_DOWN) { //check if the right key was pressed if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { //add the text to the textview tv_View.setText(tv_View.getText() + ", " + et_Text.getText()); //and clear the EditText control et_Text.setText(""); return true; } } return false; } }); }
接下来,我们将一行行分析这些代码。首先,我们加载了布局。然后我们创建一个TextView和一个EditText变量并加载我们自己的接口对象到这两个控件中(这就是我们需要ID的原因)。最后,我们添加一个新的OnKeyListener到EditText控制。在这个OnKeyListener,我们重载了onKey方法,这个方法在一个键被按下时并控制处于活动状态时调用。在该方法中,我们执行两个检查:第一,以确保键被按下(而不是放开),第二个是特定键(在这里是D -键盘中心键)。如果这两个条件满足,我们增加EditText控件上的文字到TextView,最后删除EditText控件的文字。运行并测试应用程序。太好了,你创建了第一个真正的Android应用程序。
Android应用程序设计
如同每一个平台,Android了有自己的设计挑战。永远记住,你是在一个有限的内存,磁盘空间和处理能力的移动平台上。因此,Android(机器人)会自动杀死进程(每个应用程序运行在自己的进程中),以保持系统的响应。进程运行是按重要性排序。最重要的是当前活动的进程,接着是可见和状态服务进程。在最底层的进程是空的进程和后台服务。要记住这一点,因为你不希望你设计你的应用程序在运行的过程中被杀掉。此外,您可以使用Android手机内置的硬件。但是请注意,并非所有手机都有这样的硬件,因此并非所有机型都能运行您的应用程序。
通过本教程希望你明白Android的开发基础知识。由于这是我在CodeProject上的第一篇文章,任何反馈都非常感激.