上篇博客当中我写了如何搭建开发环境,写完才发现有更简单的方法,还是要与时俱进啊。上篇当中我还写了如何建立一个工程,而且建立了hello world工程。这次我们就来看一下这个hello world工程的结构,里面有些什么东西。让大家对开发android程序从总体上有个印象。
首先,我们打开上次我们建立的工程。我们先看一下这个工程的目录结构,android工程这里面到底有些什么文件
Helloworld ---------项目
|----Src ----------你写的android应用程序的java源代码
|----gen ----------系统自动生成的资源标识
|----Android 4.1 -----------放android API的包
|----Android Dependencies -----------兼容包
|----assets
|----bin ----------你生成的apk文件就是放在这里
|----libs ----------库文件
|----res ----------资源文件,包括图片、布局文件等资源
|----AndroidManifest.xml ----------应用程序的描述表
上面这个目录,大概讲了每个文件夹里面放的是什么东西。我相信大家如果继续学习android应用程序开发,以后会非常熟悉这些东西。我们接下来主要讲一下两个比较重要的东西。第一个是布局文件;第二个是hello world的源文件。
布局文件
我们可以打开这个在res->layout->activity_helloworld.xml这个布局文件。双击打开之后,有两种浏览视图,一种是图形界面的,另外一种是文本界面的。
这个文本是用xml文件写的,什么是xml?Xml(Extensible Markup Language,可扩展标记语言)。什么又是布局文件呢,从这个名字可以猜个大概,所谓布局,就是把某个东西按照某种规律摆放好,这个东西就是一些控件、自定义的视图等等。我们来看一下xml文件里面的内容。
<RelativeLayout 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" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
tools:context=".Helloworld" />
</RelativeLayout>
xml的格式就是<元素 元素属性> 嵌套元素 </元素>;我们按照这个格式来分析一下,上面的代码。
首先是有一个元素叫“RelativeLayout”的,这个就是一个布局的名字,这种布局从叫相对布局,从英文名来看Relative它还有一个意思就是“有关系的”,也就是说这种布局里面的元素与元素之间是有关系的。关于布局我们就看到这里,后面会有文章来讲这个布局的。
这个布局自身有很多熟悉对不对。我们看第三、第四行。
android:layout_width = "match_parent".这句话的意识就是这个布局的宽度会根据装载这个布局的大小来自己适应,通俗点来说就是屏幕有多宽它就有多宽的意思,当然这个只适用于这种情况。
接下来我们看它的嵌套元素,这个布局里面有一个元素,这个元素叫“TextView”,它是一个android自带的一个控件。它可以用来显示一些文本信息,大概你们猜到,这个hello world就是这个东西显示出来的。别急!继续往下看。
我们看第一个属性:android:id="@+id/textView1";这个属性是为这个控件分配一个ID号,如果我们需要找到这个控件,我们就可以通过这个ID号来找到它。里面有一个+的符号,这个+的意思就是让系统自动生成一个唯一的ID号。
第二个属性:android:layout_width="wrap_content";这个属性的意思就是这个控件根据要显示得内容大小来决定这个控件的大小,假如说我要显示两个字符,那么它就是两个字符的宽度就够了。第三个属性相信大家肯定能想到它是什么作用了。
第四个属性:android:layout_centerHorizontal="true";这个从名字上来看,大家估计能猜到点什么,就是水平居中的意思,那么这个控件会在屏幕中间的地方出现。第五个属性大家也肯定知道是什么意思啦,不知道?面壁去~~~
第六个属性:android:text="@string/hello_world" ,能猜到吧?这个属性就是这个控件里面要显示得文本内容。细心的读者会发现,这里是hello_world。但是显示得却是hello world.。难道这个下划线代表的是空格嘛?其实不是。注意一下这个hello_world前面还有@string。大家打开res->value->strings.xml,是不是可以在这里面找到<string name="hello_world">Hello world!</string>。也就是说这里android:text="@string/hello_world",其实它会去到strings.xml,这个文件下面找到hello_world的值Hello world!所以它可以变成这样子,android:text="Hello world!"。而且你这样写也是对的,那为什么要多次一举呢?现在你一个变量,你可能不觉得什么修改这个地方还是修改strings.xml里面的值都一样,但是当你的程序有很多这种变量的时候,你想把你软件从中文翻译成英文,你是不是更愿意在一个文件里面把这些变量修改了。如果你很有主见,你觉得修改只是地方不同了,没多大区别。那好吧,如果有一天你又要把它改成中文,你是不是又要重新找到这些变量,把它改回来。你的老板很有可能这么干!如果你把它保存在一个文件里面,显然你可以把它备份起来,如果你的老板让你改回来,你可以理直气壮跟他说,“怎么又要改回来啊,这个得花一个星期啊”。那么你这个星期里面又可以干很多你爱干的事了。最后留一个问题,现在我要显示Hello world!而且显示得很好,如果哪天我觉得Hello world!不够漂亮,我在代码把显示内容改成Hello world!Hello world!。它会不会自己适应控件大小呢,把所有字符都显示出来呢?这个可以自己去折腾一下!
关于布局文件,先讲这么多吧,应该会有个感性的认识,后面我们再详细讲布局。这里只要知道android可以用布局文件来描述整个应用程序各个元素的组织就可以了。
Java源代码
package com.ap.helloworld;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class Helloworld extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helloworld);
}
}
这里默认大家已经有java的相关知识,如果没有java的相关知识,希望大家可以先去学习一下java。如果学习过过java的都知道java会有一个入口函数即main函数。但是android应用程序里面是没有这个main函数的。问题来了?那android应用程序哪里是入口呢?Android程序的设计有些不同,android应用程序会有一个生命周期,在这个生命周期里面的某一个时刻会有一个函数被调用。当Activity启动的时候,暂停的时候,关闭的时候android会调用一个函数。如果学习过设计模式,大家会觉得这个跟观察者模式是不是很像?Don't call me,I will call you。意思就是不要找我,我有事会找你的。明显的交友不慎啊!所以当android启动一个Activity的时候会调用onCreate这个函数。那么你可以在这个地方做一些初始化。在这个程序里面调用了一个setContentView(R.layout.activity_helloworld);它的作用就是把activity_helloworld这个布局文件的内容显示出来,我们刚才说过了Hello world!这个就是在这个布局里面,所以调用这个函数之后Hello world!就会显示出来了。
总结:虽然hello world的程序简单,但是对于第一次接触的初学者来说也许也并不是那么简单,把这个程序拿出来讲的目的,首先是希望大家对于android的应用程序的一个结构有一个了解。hello world程序虽小,但是五脏俱全。通过这个让大家开始学习android应用程序还是比较合理的。这篇文章首先是写了android应用程序开发有多少文件需要大家了解的,讲了一下布局文件,布局对android的UI来说非常重要,这里只是讲了一个大概,后面会有一些文章专门介绍布局。最好对android的代码结构也做了比较简单的讲解。