首届 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下放了哪些东东:
<?xml version="1.0" encoding="utf-8"?>
<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里写了些什么:
package zcy.com;
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类的定义:
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* 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文件,看看这个值是多少:
<?xml version="1.0" encoding="utf-8"?>
<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是需要你手动加上去的,不会自动生成。
<?xml version="1.0" encoding="utf-8"?>
<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活动。