首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

编纂第一个Android程序

2012-08-27 
编写第一个Android程序我们先了解一下编写程序都要涉及到哪些东西,熟悉一下SDK的基本组件,然后编写一个很

编写第一个Android程序

我们先了解一下编写程序都要涉及到哪些东西,熟悉一下SDK的基本组件,然后编写一个很简单的小程序。

一、分析Demo

在上一节建立的工程Demo下,打开src/com.android.demo下的DemoActivity.java,如下所示:

编纂第一个Android程序

Demo程序的代码就只有13行,我们依次来分析一下:

R.layout.main就是R.layout类里面的一个属性,值为0x7f030000,一个资源ID,那么它指向哪里呢?

编纂第一个Android程序

上图可以看到,真正的视图布局文件在这里。上一节讲过,res文件夹下的资源会自动在R.java里面生成记录,现在看到确实是如此。至于那个资源ID是根据什么规则生成的,那就没研究了,反正他自动维护,我们乐得清闲。

一会儿我们要修改程序界面就可以从这里入手。

Demo程序的代码部分就这么多,是不是觉得其实并没那么难?呵呵。

█ 学过JAVA的同学可能会有疑问了:怎么没有入口函数呢?

我们编写Android程序是在Android SDK下进行的,SDK在背后完成了很多工作,包括程序从哪里运行、怎么渲染视图等等,我们只需要写程序的逻辑部分、视图部分,对于这个程序里的代码来说,DemoActivity类就相当于一个入口了(姑且称之为入口Activity吧),这和原生的JAVA编程是有一点不一样哈。

█ 喜欢动脑经的同学会想:一个程序可能有多个界面,就有多个Activity,那么怎么知道该选择哪个Activity为入口呢?

上一节还提到过一个全局配置文件AndroidMainifest.xml,我们打开看看:

编纂第一个Android程序

我们可以看到,在这个文件里面配置了所有Activity的信息,DemoActivity里面有两个intent-filter,<action android:name="android.intent.action.MAIN" />,<category android:name="android.intent.category.LAUNCHER" />,发现了LAUNCHER字样,可以猜测这个就是入口标记,我们一会儿验证一下。

二、新建一个Activity

我们新建一个Activity,脱离自动生成的DemoActivity试试

编纂第一个Android程序

在src下的com.android.demo上点击右键 –> New –> Class

编纂第一个Android程序

Name处填写类的名称,在这里我们填写launcherActivity,Superclass处我们填写android.app.Activity,就是Activity的基类,其余的不用修改,点击”Finish“,结果如下图所示:

编纂第一个Android程序

可以看到,launcherActivity新建好了,还自动生成了部分代码,真方便。

糟了,DemoActivity类是大写字母开头的,我们的是小写的l开头,还是统一一下吧:

在launcherActivity.java中直接修改类的名称,将l修改为L,发现IDE报错了(因为JAVA是区分大小写的,类名必须和文件名一样),把鼠标移动到错误的地方,弹出修改建议,我们选择”Rename compilation unit to…“,如下图所示:

编纂第一个Android程序

报错消失了,文件名也变为大写开头了,真方便…

依瓢画葫芦,把Bundle组件引入进来,import android.os.Bundle;

然后重载onCreate方法。这个必须重载,我们得在里面设置视图呀,操作如下:

编纂第一个Android程序

LauncherActivity文件上点击右键,Source –> Override/ Implement Methods...,勾选onCreate,点击”OK“,代码就自动生成好了:

编纂第一个Android程序

三、新建布局

这个Activity还没有视图,我们新建一个:

编纂第一个Android程序

在res/layout上点击右键,New –> Other

编纂第一个Android程序

选择Android XML Layout File,点击”Next“,在下一个页面输入布局名称”launcher“,点击”Finish“,布局文件就创建好了:

编纂第一个Android程序

现在的SDK自带了可视化布局,直接往上拖就行了,不过想要做出好看的界面,还需要深入了解Android界面布局,以后遇到再详细讲解。

编纂第一个Android程序

可点击标注处切换可视化界面或XML编辑界面,很多XML页面打开都有这个切换按钮,可以进行切换。

这里我们要做一个启动界面,中间加个加载图标,一行文字即可。详细过程不多叙述(因为我都还没完全学会如何布局,不敢误人子弟),最终界面如下所示:

编纂第一个Android程序

XML文件内容如下,可复制粘贴到文件里:

可以看到,我们亲自编写的Activity运行起来了。正如我们所料,intent-filter段中的那个配置信息确实是起到了标记入口Activity的作用。

程序运行了半天还是一直加载,怎么回事呢?因为程序中没后续动作了。接下来我们修改程序让它跳转到DemoActivity中。

四、Activity之间的跳转

这需要在LauncherActivity类中修改代码,思路是在onCreate被调用、设置好视图后,等待一段时间,再跳转到DemoActivity。开始编码:

?12345678910Timer timer = new Timer(); timer.schedule(new TimerTask() { ????@Override ????public void run() { ????????// TODO Auto-generated method stub ????????Intent goIntent = new Intent(); ????????goIntent.setClass(LauncherActivity.this, DemoActivity.class); ????????startActivity(goIntent); ????} }, 3*1000);

这里我们新建了个计时器timer,添加了个任务,在3秒钟后执行。跳转的代码位于第6、7、8行:

建立一个Intent,设置好起始地点(LauncherActivity),目的地点(DemoActivity),开始跳转(startActivity)。

这段代码位于setContentView(R.layout.launcher);之后,最终代码如下所示:

?123456789101112131415161718192021222324252627282930package com.android.demo; ??import java.util.Timer; import java.util.TimerTask; ??import android.app.Activity; import android.content.Intent; import android.os.Bundle; ??public class LauncherActivity extends Activity{ ??????@Override ????protected void onCreate(Bundle savedInstanceState) { ????????// TODO Auto-generated method stub ????????super.onCreate(savedInstanceState); ????????setContentView(R.layout.launcher); ??????????????????Timer timer = new Timer(); ????????timer.schedule(new TimerTask() { ????????????@Override ????????????public void run() { ????????????????// TODO Auto-generated method stub ????????????????Intent goIntent = new Intent(); ????????????????goIntent.setClass(LauncherActivity.this, DemoActivity.class); ????????????????startActivity(goIntent); ????????????} ????????}, 3*1000); ????} ??}

保存,再次运行,看欢迎页面是否在3秒钟后跳转到了主页面。

五、遗留的问题

在这一节,又接触了一些新东西,之前没说明,可能有些同学早就产生疑问了,这里集中讲一下:

第二个import语句引入的Bundle是什么,后面一直没用过?

Bundle的字面意思为:捆、束,一组东西,在Android中用来传递数据,表现为Key-Value键值对,可以从一个Activity传递数据到另一个Activity。在这个例子中我们还没用到它,但onCreate函数的参数必须要它,所以,必须import…

最后又用到了个Intent,是什么?

Intent,意图,和Bundle类似,也是包含一组东西,但不仅仅是数据,还包含操作类型、操作对象等信息。在上面的例子中startActivity函数只需要一个goIntent就能实现跳转功能,就是因为goIntent包含了操作所需的东西,如果需要传递其它信息,还需要更复杂的设置。

热点排行