自古以来第一个程序便是helloworld,安卓也不例外。只不过安卓多了一些看似复杂的东东而已。
下面就用eclipse新建一个叫HelloAndroid的Application。
新建完了目录便是这样子哒。。。
src就是安卓的源码了 ,这里面是java,用来实现程序的,简单的说,这里面的代码,就是目标app的程序。
gen是根据res而生成的java 一般不用直接修改的
res就是资源文件夹了,里面放了图片,音频,字符串等等等的资源文件,用来给程序调用的
接下来是AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloandroid"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.helloandroid.MainActivity"
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>
这个manifest就是一个清单,介绍了这个app有啥主要的东西以及基本信息。
接下来介绍下app的layout,就是它到底输出了什么,也就是说屏幕上是什么东东。
<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="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
对应着屏幕会好看点吧
看图说话,这里有一个屏幕,也就意味这至少有一个Layout,xml里面就定义了一个RelativeLayout,然后这个Layout里面还有个TextView,上面写了Hello world!有趣的事情是,TextView定义的时候,里面的text为@string/hello_world,没错,这个hello_world可以看成一个字符串变量,hello_world是它的变量名称,那么他的值在哪里呢?之前说过,res文件夹里面存放资源,其中有一项资源便是字符串,打开res文件夹里面的strings.xml,里面便是这样的
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloAndroid</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
</resources>
不难看出,hello_world的值就是Hello world!
和屏幕上输出的是一致的。
好,我们现在再回头理清一下思路。安卓的app在我看来,就分成两块,一块便是看得见的,屏幕上的那些东东,另一块便是代码,如何实现那些东东,就好比在普通c程序中,你写一个1+1=2的程序,计算机它自己会很自觉的去算出来,然而人并没有看到。将它们显示出来,就需要用类似于printf的函数,这样人才能很好的与计算机交流。安卓程序也是一样的。我们设计的用户界面就类似于printf函数,不过更加复杂,试想一个程序,全是黑屏,那还怎么弄!在安卓程序中一般用xml来设计界面,这样的界面层次清晰,便于理解,再回头看一下上面layout中的Activity_main.xml就好理解了。
说完了构架和界面,说一下真正的程序代码吧 hia~hia~hia~
安卓的主程序就是用正宗的java写的了,要保证写的程序不是花瓶,中看不中用,就全靠这部分了。首先,看一下,这个helloworld的主程序吧。别看helloworld这么简单,其实内部的原理还是很值得推敲的。废话少说,上代码!
package com.example.helloandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
首先声明下他的包名,一般一个人出场的时候总会自报门户,例如我是哪里哪里人啊什么的,包名就是代码的门户了,代码出场也得自我介绍下吧。接着就是import了,import就简单理解为include吧,只是比include好,具体百度吧。
接下来它就定义了一个MainActivity的class,这个class的父类是Activity。啥是父类呢,这么说吧,类有一个爸爸,它就可以遗传爸爸的特性了。为什么要遗传呢,因为编写代码很麻烦( ▼-▼ )因此自己重新去写一个单独的MainActivity工作量很大。于是乎,那就写一个模板。。。这个模板就是Activity,然后MainActivity就拿过来直接用啦。@override是重载的意思,也就是说这个onCreate方法就是模板里的,需要重写。模板不可能适应所有的情况吧,就好像抄作业一样,拿别人作业为模板总不能把人家名字也抄了吧。这个override就类似于抄作业的时候你把别人家的名字改成自己的。
好,废话了这么多,其实从名字来看,MainActivity就是安卓的主activity,里面定义了一个onCreate的方法,就是启动这个activity。setContentView(R.layout.activity_main);这个的意思就是把这个视图设成xml里面的一样。前面设计了那么长时间的图,总得拿过来用吧,这个就是把layout里面的activity_main拿过来作为这个视图,这样才会在安卓手机上显示出hello world之类的文字哈。