Android學習筆記 三 Andriod程式框架
修改Eclipse的字型,我希望大一些,反正22寸的顯示屏:
Window->Preferences->General->Apprearance->Colors and Fonts -> Java -> Java Editor Text Font(...) -> Edit
在此次,我們先建立一個Hello,Android的程式,並既而討論Andriod的程式架構。
1、建立project:File > New > Project > Andriod > Andriod Project
2、如圖填入poject資訊:
- Project Name:這是project的名字,同時根據這個名字在workspace中自動生成相關目錄(見location)。
- Application Name:這個映用的名字,載入在Andriod裝置中,圖示上顯示的映用名稱。
- package Name:這是java的package的名稱,這裡,我使用了com.wei.learning.helloandriod。為了避免名稱衝突,採用了標準的namespace的方式。
- Create Activity:這是Andriod的Activity子類的名稱,一個Anctivity是一個可執行的類,相當於main。
- Min SDK Version,這是表明該映用能夠相容的最小的API版本號,這裡選擇了7,也就是可支援Andriod 2.1以上的版本。通常選擇Build Target的編譯版本一致。Andriod是前向相容的,以本例子為例,可以在Andriod 2.2的平臺上跑,但是如果我們在Build Target中選擇了2.2,不能保證則會2.1的平臺上跑。
如果我們不是用Eclipse,我們也可以用命令列生成project,如下:
android create project / --package com.wei.learning.helloandroid / --activity HelloAndroid / --target 2 / --path <path-to-your-project>/HelloAndroid
3、寫我們的Hello,Andriod例子
在HelloAndriod/src/com/wei/learning/helloandriod/中是我們的原始碼檔案,這裡只有一個,HelloAndriod.java,內容如下:
package com.wei.learning.helloandriod;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;//在Eclipse中可以簡單採用Shift+Ctrl+O可以自動根據內容生成所需要的import的package。public class HelloAndriod extends Activity { //一個Activity是實體用於處理使用者操作,一個映用可以多個分割的activities,但同一時刻使用者主能與其中一個互動 /** Called when the activity is first created. * 這裡的註釋採用javadoc的標準寫法,以便生成我們的API的HTML文件。 * OnCreate()用於初始化和UI的建立。*/ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* View是在UI layout中使用的元素,包括button等等,這裡使用TextView。建立對講後,設定文字內容,最後使用setcontentView()來將tv物件防止在activity UI中。*/ TextView tv = new TextView(this); tv.setText("Hello, Andriod!"); setContentView(tv); //setContentView(R.layout.main); }}
4、javadoc的註釋
javadoc的註釋方式已經忘得差不多,需要複習一下。
/** ...... */ 註釋若干行,並寫入 javadoc 文件,命令列為:javadoc -d 文件存放目錄 -author -version 原始檔名.java,在Eclipse中Porject-> Generate Javadoc...
在/** */裡面是可以使用HTML的指令碼,例如<li>,<br>等等。可以在類,方法之前加入註釋說明。例子如下:
/*** 方法/類的簡述.* <p>詳細說明第一行<br>* 詳細說明第二行* @param ,用於引數描述* @return ,描述返回之沒有返回值*/
@author 標明開發該類模組的作者@version 標明該類模組的版本@see 參考轉向,也就是相關主題@param 對方法中某引數的說明@return 對方法返回值的說明@exception 對方法可能丟擲的異常進行說明@author 作者名@version 版本號
5、執行
選單Run > Run,或者直接按三角圖示,選擇”Andriod Application“,將會啟動模擬器,由於我們設定為2.1的編譯環境,將會啟動我們建立的VM2.1來執行。結果如下左邊圖,按右邊返回鍵,可以見右圖,圖示等資訊已將安裝。
6、project的相關內容
我們先將例子跑起來,回過頭,我們認真看看Andriod project的結構,如圖所示。圖中所見的結構同我們在project目錄,目錄有:AndroidManifest.xml bin/ gen/ res/ assets/ default.properties proguard.cfg src/
gen/
gen/下面有一個重要的檔案R.java,這個檔案由系統為一些資源自動生成唯一標識的ID,想象以前的VC中也有類似的檔案。R相當於resourse。
assets/
放入project所需的內容,例如圖片。
res/
我們在res/中加入某些資源,例如一個圖示,會在gen/下的R.java中生成一個ID,而assets下的資源將不會,需要通過路徑來進行訪問。res/drawable/中用於存放image,對於圖示,提供h,m,l三個解析度,以適用不同解析度的裝置。
在res/layout/下的xml檔案,用於管理我們的UI,對於一個複雜的UI,如果需要改動一點,有時都不知從何開始,因此Andriod提供了Andriod XML檔案。在Andriod的plugin自動生成了main.xml,我實驗了一下,修改無效,只是提供資訊,這是因為我們在程式用對相關元件進行了code,在本例子中如下:
<?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" /></LinearLayout>
xml是樹狀介面,首先描述Layout,然後在Layout中描述各個View和Layout,也就是layout可以巢狀。,只要是View的繼承類即可,包括自己定義的。如上所示的就是我們這個例子的一個View的描述。
andriod:這是XML中的定義,說明使用xmlns:andriod作為其namespace。andriod:layout_width 由於例子中只有唯一的元素,可以佔用全屏,使用fill_paren。
如果我們希望可直接通過修改XML來進行佈局,而不是通過在原始碼中進行code。
1) 在main.xml中的TextView中修訂為:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />
儲存後,我們檢視R.java檔案,增加了textview的ID。為了和原來的區別,我們修改text內容,在res/values/strings.xml中,修改:
<?xml version="1.0" encoding="utf-8"?><resources> <string name="hello">Hello World, I/'m your friend!</string> <string name="app_name">Hello,Andriod</string></resources>
讓這些內容有效,修改HelloAndriod.java的內容,如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //原來是傳遞一個View物件,現在是傳遞R.layout.main,R的定義見R.java,而R.layout.main就是對應res/layuot/main.xml。 }
我們在main.xml中增加以下的屬性
android:layout_weight="2" android:textSize="25pt" android:gravity="center_horizontal" android:background="#999999" android:textColor="#aa5533"
其中gravity有以下的選項:top,bottom,left,right,center_vertical,center_horizontal,center,fill_vertical,fill_horizontal,fill,執行如圖。
libs/
如果需要使用第三方的JAR,這放置在此。在這個例子中沒有。
AndridoManifest.xml
Mandifest這個名字很熟悉,是我們將java程式壓縮為jar包,並生成可執行檔案的時候需要使用的一個檔案。在這裡描述應用的內容,有點向linux rpm中的*.spec檔案。表明應用的名稱,版本,圖示位置,最低版本要求等等。在Eclipse中點選後,可以有圖形話介面解釋。這是檔案的部分內容:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wei.learning.helloandriod" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloAndriod" 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>
在這裡icon為:@drawable/icon,就是在res/drawable/中名字為icon的image。而@string/app_name,表示在res/values/strings.xml中的定義名字為app_name的字串,在這個例子中文"Hello,Andriod"。activity這裡表明的activity的執行目標的類名稱。
如果我們需要給我們的應用設定使用者的許可,例如允許使用GPS,可以加上<uses-permission android:name="android.permission.ACCESS_GPS /">
每一個Activity都需要在Andriodmanifest.xml檔案進行註冊。一個映用有多個Activity,裡面的類名".HelloAndriod",注意是有一個".",它和package結合起來就是一個完整的類命。而後面<intent-filter>...</intent-filter>中有android.intent.action.MAIN,表明這是應用啟動時需要啟動的Activity。
</ul style="margin-left:>