Android札记【2】——系统的认识心中的Android[首届 Google 暑期大学生博客分享大赛]
[首届 Google 暑期大学生博客分享大赛——2010 Android 篇]
总想花点时间在总结一点,可是......最近在优酷上看到了一个Android教学系列视频,还不错,特此推荐给大家:http://mars-droid.com/wordpress/。虽然哪位大哥讲的已经很好了,但终究还是人家的,只有自己总结了,才会成为自己的。
相信,学习某种语言时的经典语句"Hello,world!"。所以初学Android当然也逃不了俗套。首先,在Android平台下,大体的Project文件结构是:
MyHello.java里面存放的是一个Activity类,它继承了Activity,并覆盖了其中的onCreate()方法,其实Activtity作为一个主体“活动”,它里面还有其他的一些方法,这个可以到以后我再总结一下。总之,onCreate()是在程序运行时运行,其中调用了setContentView()方法来引用视图界面。
1 package cn.yahoo.hello;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 public class MyHello extends Activity {
7 /** Called when the activity is first created. */
8 @Override
9 public void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.main);
12 }
13 }
1 /* AUTO-GENERATED FILE. DO NOT MODIFY.
2 *
3 * This class was automatically generated by the
4 * aapt tool from the resource data it found. It
5 * should not be modified by hand.
6 */
7
8 package cn.yahoo.hello;
9
10 public final class R {
11 public static final class attr {
12 }
13 public static final class drawable {
14 public static final int icon=0x7f020000;
15 }
16 public static final class layout {
17 public static final int main=0x7f030000;
18 }
19 public static final class string {
20 public static final int app_name=0x7f040001;
21 public static final int hello=0x7f040000;
22 }
23 }
24
R.java文件中其实是根据类别(attr中声明内部属性,drawable声明图像文件资源,layout声明整体的布局文件等等,string声明了一些供使用的字符串,当然还有以后必然会用到的id可声明视图中的一些供使用或监听的控件),自动相应地生成各个文件或字符的地址,以提供给src主文件中的Activity使用,通过引用其地址,就可以去控制、使用该控件,这样很方便,使得视图部分与控制部分得到了分离,使得开发更加清晰、便捷。
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello"
11 />
12 </LinearLayout>
此xml文件位于layout中,能够用来进行程序视图的布置,所以程序的界面完全有该文件来布置了。其中LinearLayout是一种线性的布局方法,而TextView则是一个用于显示的控件。相信大家学过JavaGUI的不会陌生。此外,该文件拥有的一个地址(R.java中可以找到)被上面的MyHello.java中的sentContentView引用,从而实现了程序视图的载入和呈现。
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <string name="hello">Hello World, MyHello!</string>
4 <string name="app_name">HelloWorld</string>
5 </resources>
该strings.xml文件用于定义一些字符串的具体的常量值,例如我们mai.xml的TextView中的Text内容就引用了个string文件中的hello所代表的常量值“Hello World,Myhello!”。这样可以降低程序的耦合性,尤其是可以便于大家在开发程序是推出多种语言版本(只需要在该文件中对一些常量值进行修改,很方便哈!)同时也避免了字符串的重复定义和赋值,某种程度上提高了程序运行的效率。
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="cn.yahoo.hello"
4 android:versionCode="1"
5 android:versionName="1.0">
6 <application android:icon="@drawable/icon" android:label="@string/app_name">
7 <activity android:name=".MyHello"
8 android:label="@string/app_name">
9 <intent-filter>
10 <action android:name="android.intent.action.MAIN" />
11 <category android:name="android.intent.category.LAUNCHER" />
12 </intent-filter>
13 </activity>
14
15 </application>
16 <uses-sdk android:minSdkVersion="4" />
17 </manifest>
当然最重要的文件出现了。每个Android工程里面都会有AndroidManifest.xml的配置文件,顾名思义,所有的供使用的组件(Activity,Service,ContentProvider,Broadcast Receiver,uses-permission等等)都会在这个文件中进行说明。其中第一个Activity中的<intent-filter>是找到该Activity的过滤器,其中的Action表明该Activity将会在程序载入时被第一个执行(从catergory定义中可以看出),即程序的入口。minSkdversion则是说明的改程序所应用的Android中SDK的最低版本。
其实,我在学习中才领悟到:只有开始时系统地了解到了Android开发的整体文件结构,才能够更清晰地找到切入点,进行合理地学习和编写。开始时我并没有注意到,所以写代码是显得很凌乱,没有章法,不知道什么时候该怎么样,总之很慌张......太慌张了!
经验之谈:在编写Android的应用程序时,不管简单还是复杂,都应该先考虑清楚:需要用到哪些字符串常量,从而在string中进行定义;界面如何布局,需要用到哪些控件,哪些控件需要在程序中进行监听以判断用户的操作(我建议,不管怎样,事先都将每个控件的id设置一下,这样R.java中可以自动的生成id的具体地址使用后面使用,避免以后开发开发时再回过头添加id所带来的不必要的麻烦。毕竟有些时候Eclipse所发生的错误都是你无法预知的。);每次在错误代码处进行修改之后可以立即ctrl+s进行保存刷新,这样可以查看一下是否还有错误(因为有些人可能会默认Eclipse在修改代码后会自己自动刷新,所以看到修改后错误提示还在就没了耐心,结果越改越乱)。恩,其实算不上经验吧,就是自己在学习过程中的一些感受吧,希望对大家能有所帮助,共同进步!