首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇
既然是第一课我尽量让有一点Java基础的人都能看懂,其实我也是新手。
略过开发环境的配置,我们直接讲如何在eclipse里面做一个简单的界面出来。
先看一下一个基本的Android Project组织结构:
src下是我们自己写的源代码。Android包名至少要包含两层。
gen下面内容是自动生成的,我们不要去动它。它下面就一下R类,并且R类自动是和Show.java在同一个包下,所以在Show.java中可直接使用R类。
Android1.5是我们使用的开发包版本。
Rferenced Libraries下是我们引用入的外部Jar包。相当于你在VS中要“引用”一个dll文件。
assets下一般放一些文件资源,如一张图片、一个word文档。
res我把它称之为内部资源吧。这里面新建的文件名都要用小写。drawble下放一些图标呵、颜色值呵等,用于渲染控件。layout是布局文件,相当于ASP.NET中的aspx文件,而cs文件对应我们这里的src下的java文件。values下存在一些name-value对。
看一下show1.xml下放了哪些东东:
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical"
android:layout_width ="fill_parent"
android:layout_height ="fill_parent"
>
< TextView
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:text ="@string/hello"
/>
< Button
android:id ="@+id/next"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:text ="下一步"
/>
</ LinearLayout >
LinearLayout是一个流式的布局管理器,它的orientation可设置为vertical或horizontal,这里设为vertical则控件依次垂直排列。
我们放了一个TextView用于显示文本和一个Button并赋给它一个id。
看一下Show.java里写了些什么:
import android.app.Activity;
import android.os.Bundle;
public class Show extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.show1);
}
}
Show继承自Activity类恰如我们写的ASP.NET页面继承自Page类。setContentView(R.layout.show1)指明了要在手机屏幕上把show1.xml中的东东显示出来,那前面的R.layout是什么意思呢?看一下R类的定义:
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package zcy.com;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon = 0x7f020000 ;
}
public static final class id {
public static final int next = 0x7f050000 ;
}
public static final class layout {
public static final int show1 = 0x7f030000 ;
}
public static final class string {
public static final int app_name = 0x7f040001 ;
public static final int hello = 0x7f040000 ;
}
}
R是一个final类,它里面又嵌套了五个fianl类:attr,drawblw,id,layout,string。其中layout类下有一个属性int show1,知道R.layout.show1的渊源了吧。
运行效果:
注意在show1.xml中TextView控件的text属性值可是“@string/hello”,为什么手机上显示的是:Hello Word,Show!呢?“@string/hello”的意思是引用values里面的一个名为hello的string的值,打开values下的strings.xml文件,看看这个值是多少:
< resources >
< string name ="hello" > Hello World, Show! </ string >
< string name ="app_name" > ShowView </ string >
</ resources >
当然我们现在只建立了一个Activity类,要是建立多个Activity程序会首先运行哪个呢?用ASP.NET建立网站时我们以在IIS里设置默认起始页,在Android中这样设置的:
打开AndroidManifest.xml,顾名思义,这是一个清单文件,里面包含了所有你新建的Activity类。但是这些activity是需要你手动加上去的,不会自动生成。
< manifest xmlns:android ="http://schemas.android.com/apk/res/android"
package ="zcy.com"
android:versionCode ="1"
android:versionName ="1.0" >
< application android:icon ="@drawable/icon" android:label ="@string/app_name" >
< activity android:name =".Show"
android:label ="@string/app_name" >
< intent-filter >
< action android:name ="android.intent.action.MAIN" />
< category android:name ="android.intent.category.LAUNCHER" />
</ intent-filter >
</ activity >
</ application >
</ manifest >
在 activity android:name =".Show"里面有这么两行<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />。这说明首先运行的就是这个Show活动。