我們在上篇建立一個簡單 Android 專案,本篇來介紹專案的目錄框架,不過在介紹之前必須先了解 Android 所提供基本模組
對於想接觸 Android 的開發者,大部分都是對於手機平台有興趣,而在手機上我們能做些甚麼,就必須仰賴 Android 提供的基本模組來撰寫,基本模組有4種,分別為 Activity , Service , Content Provider , Broadcast receivers, 每個基本模組都有其主要的應用領域
Activity(活動):
是最基本的模組,大部分的應用程式都是從 Activity 開始, Activity 提供使用者介面,包含畫面(UI),事件等等的處理,而應用程式也可以包含多個 Activity , 每個 Activity 都負責不同的功能,舉個例子,一般的應用程式在點擊執行後通常都會先顯示 Logo 流程(畫面),再進入其它的流程(可能是主流程),而 Logo 流程就可以由單個 Activity 來完成, 在 Activity 中也可以呼叫其他的基本模組來達到特定的功能,比方說取得目前的電池容量,就必須呼叫 Broadcast receivers
Service(服務):
提供背景執行的功能,通常不會提供 UI ,避免影響當前的模組, 比如說有個播放 mp3 的應用程式,主要的 Activity 提供操作的功能,當你點選播放的按鈕時,就會呼叫 service 播放音樂,或者是下載檔案等等,都能使用 Service
Content Provider(內容提供):
負責處理應用程式需要的資料,導入或導出到不同的容器中,比如說想取得電話簿中的連絡人資料,想要儲存資料到 SD 卡中,都必須透過這個類別來達成
Broadcast receivers(廣播接收):
負責接受或發送由系統傳出的訊息,如 收到簡訊,來電,電池變化等等都是由系統發送通知,我們只要覆寫廣播接收的方法,指定處理特殊的事件,就能達到需求
先從簡單的說起吧
proguard.cfg 為混淆程式碼用,防止有心人士竊取原始碼,產生 apk檔就會自動運行,正常情況下不需要修改它,
project.properties 編譯專案時自動產生,裡面的 target=android-15 代表執行時的 Android 版本編號,會和 AndroidManifest.xml 中的 target SDK version 相同,正常情況下也不需要修改
src 資料夾放置所有的類別檔
res 資料夾放置專案需要的資源,如圖片檔,音樂檔等等,資源命名只接受小寫英文,底線,數字
gen 資料夾中有 R.java ,裡頭放置所有的資源索引,不可以手動修改,當你在 res 資料夾有新增資源, R.java 就會自動加入該資源的索引,方便你在程式中使用
bin 資料夾存放執行時期的相關檔案,成功編譯過後會產生 apk 檔
assets 資料夾也是存放專案的資源用,和 res 資料夾不同的是放置在裡面的資源不會自動產生索引
接著回到 src 資料夾中的 MainActivity.java 吧
MainActivity.java
1: package com.example.helloworld;
2:
3: import android.os.Bundle;
4: import android.app.Activity;
5:
6:
7: public class MainActivity extends Activity {
8:
9: @Override
10: public void onCreate(Bundle savedInstanceState) {
11: super.onCreate(savedInstanceState);
12: setContentView(R.layout.activity_main);
13: }
14:
15:
16: }
第 1 行 指出類別的套件路徑
第 3 ~ 4 行匯入需要的類別
第 7 行開始為 MainActivity 的本體,當作開始執行的類別必須繼承 Activity 類別並覆寫 onCreate( ) 方法(第 10 行)
第 11 行呼叫父類別(Activity)的onCreate( )方法,並傳入 Bundle 物件 , Bundle 物件作用是在不同的 Activity 之間傳遞資料數值使用,由於目前只是新開啟1個Activity,所以不需要修改 Bundle 物件
第 12 行呼叫 setContentView( )來套用指定的佈局配置(R.layout.activity_main),你可以打開 res 資料夾 -> layout -> activity_main.xml 來查看配置的內容,接著介紹配置內容吧
activity_main.xml 是 xml 檔案,內容的格式通常都是 "值" 對應 "值" 的格式,如
android:layout_width="match_parent" 代表 android:layout_width 對應 "match_parent"
R.layout.activity_main
1: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2: xmlns:tools="http://schemas.android.com/tools"
3: android:layout_width="match_parent"
4: android:layout_height="match_parent" >
5:
6: <TextView
7: android:layout_width="wrap_content"
8: android:layout_height="wrap_content"
9: android:layout_centerHorizontal="true"
10: android:layout_centerVertical="true"
11: android:text="@string/hello_world"
12: tools:context=".MainActivity" />
13:
14: </RelativeLayout>
第 1 行 xmlns:android 屬性用來定義 Android namespace , 其值必須是 "http://schemas.android.com/apk/res/android"
第 2 行 xmlns:tools="http://schemas.android.com/tools" 為使用 tools 的定義,對應到第 12 行的 tools:context=".MainActivity"
第 3 ~ 4 行設定該佈局的寬度和高度,其對應的值有3種,詳細介紹
第 6 ~ 12 行為 TextView 的定義, TextView 通常用來顯示文字內容,詳細介紹
第 7 ~ 8 行設定 TextView 的寬和高
第 9 ~ 10 行設定 TextView 的水平與垂直的中心點皆對應其 parent (也就是 RelativeLayout)
第 11 行設定 TextView 內容, "@string/hello_world" , 代表取得 string 中的 hello_world 內容,使用 ctrl + 滑鼠左鍵查看
第 12 行設定上下文對應到目前的 MainActivity ,沒有甚麼影響
AndroidManifest.xml 為該專案(應用程式)的設定清單表,點選之後有5個頁面可以編輯,前4個頁面編輯後都會呈現在第5個頁面中,直接看內容吧
AndroidManifest.xml
1: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2: package="com.example.helloworld"
3: android:versionCode="1"
4: android:versionName="1.0" >
5:
6: <uses-sdk
7: android:minSdkVersion="8"
8: android:targetSdkVersion="15" />
9:
10: <application
11: android:icon="@drawable/ic_launcher"
12: android:label="@string/app_name"
13: android:theme="@style/AppTheme" >
14: <activity
15: android:name=".MainActivity"
16: android:label="@string/title_activity_main" >
17: <intent-filter>
18: <action android:name="android.intent.action.MAIN" />
19:
20: <category android:name="android.intent.category.LAUNCHER" />
21: </intent-filter>
22: </activity>
23: </application>
24:
25: </manifest>
AndroidManifest.xml 有一定的格式,最外層為 manifest , manifest 必須包含 application , application 可以包含 多個 activity , service 等等, 而 activity 又可以包含 intent-filter, meta-data, 有很多選項都可以在這些元素中設定
第 1 行 xmlns:android 屬性用來定義 Android namespace , 其值必須是 "http://schemas.android.com/apk/res/android"
第 2 行為套件路徑(名稱),其值在開始建立專案時設定,當然現在改變也是可以的
第 3 行應用程式內部版本編號,在內部測試確認版本用,使用者看不見
第 4 行應用程式外部版本編號,上架用,也會顯示在 google play 以及使用者的手機上
第 7 行最低的 SDK 版本需求, 當使用者的 SDK 小於該值,就無法安裝
第 8 行開發的 SDK 版本
第 11 行設定應用程式的圖示,顯示在使用者的手機上
第 12 行設定應用程式的名稱, "@string/app_name" 代表取得 string 中的 app_name 內容
第 13 行設定應用程式的主題, 所謂的主題就是該應用程式畫面呈現的樣式
第 15 行設定啟動的 Activity ,可以有很多的 Activity,不過你必須指定啟動的那一個
第 16 行設定應用程式的名稱,會蓋過第 12 行的設定
第 17 行設定啟動的 Activity 的 intent-filter, intent-filter 會決定該 activity 的功能
第 18 行設定 intent-filter 的 action 為 主要進入點
第 19 行設定啟動該 activity
0 意見:
張貼留言