1. 程式人生 > >Android學習筆記 三 Andriod程式框架

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:>