close

20170918 星期一

 

下面三節我們從Android 的 MVC 架構和MVC 元件之間的互動、來了解如何撰寫Android程,有了設計架構概念後就能明白如何撰寫程式。 

Android 的 MVC 架構

 

Android使用MVC架構,為了實現 MVC(Model-View-Controller)架構,Android 將 APP 的開發分成三大部分: 

 

控制器 Controller - 負責轉發請求,對請求進行處理。 

視圖 View - 介面設計人員進行圖形介面設計。 

模型 Model - 編寫企業邏輯或程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能)。

  

MVC 元件之間的互動

  • 模型(Model) 用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。「 Model 」有對資料直接存取的權力,例如對資料庫的存取。「Model」不依賴「View」和「Controller」,也就是說, Model 不關心它會被如何顯示或是如何被操作。但是 Model 中資料的變化一般會通過一種重新整理機制被公布。為了實現這種機制,那些用於監視此 Model 的 View 必須事先在此 Model 上註冊,從而,View 可以了解在資料 Model 上發生的改變。(比較:觀察者模式(軟體設計模式))
  • 視圖(View)能夠實現資料有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程式上的邏輯。為了實現 View 上的重新整理功能,View 需要存取它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。
  • 控制器(Controller)起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出回應。「事件」包括用戶的行為和資料 Model 上的改變。

參考資料: https://upload.wikimedia.org/wikipedia/commons/f/f0/ModelViewControllerDiagramZh.png

 

MVC 元件與目錄結構

 

  

Android 的程式架構

Android的專案,主要可分為3個部分:分別是 manifest、java 和 res

1. manifest 

Android App 整體資訊的主要設定檔,manifests 目錄內有一個預設名稱為 AndroidManifest.xml 的檔案,而每一個 Android APP 都須要它,此檔案儲存著該 APP 的重要資訊。設定檔的內容使用許多XML格式的檔案,不同用途的檔案,會使用標籤(tag)來執行一些設定。Android APP 中會包含許多 XML 格式,檔名中的 Manifest 為「表明」的意思。這是一個可以向 Android 「表明」我們 APP 的檔案,以便讓 Android 系統完整地了解我們 APP 的資訊。

2. java 

放置 Java 原始程式,子目錄名稱為 [Company Domain(inverse) + Application name],裡面有一個預設的 Activity 元件 MainActivity.java。子目錄名稱,就是建立專案時由 Company Domain 反向後,在與 Application name 組成的 Package name,裡面有一個預設的 Activity 元件 MainActivity.java。 

3. res

為 resource 的縮寫,專案所需的 UI 相關檔案,如 layout、圖像與文字。 

drawable : 圖像檔案資源,例如 png、jpg……圖形檔案

layout : UI(使用者介面) 的 layout,例如在「res/layout」目錄下,已經建立一個名稱為「activity_main.xml」的預設畫面配置檔案。

values : UI 需用到的文字 (strings.xml)、顏色等一些常數資料

下面我們利用網路上常用的 HelloWorld 程式來大略看一下Android 的程式架構.一個最單純的 Android Project (HelloWorld) 會包含哪些檔案.將 HelloWorld 點開. 應該可以看到如下的資料結構:

 

src : 放置主程式、class 的地方. 

java : 放系統資源檔、元件存放的地方. 當中的 R.java 是由 Android Development Kit (ADK) 所自動產生的資源索引檔(resource index). R.java 是根據 main.xml (在 res.layout中) 所自動產生,並不是由程式設計師編寫的,切勿修改此檔案。 

res: 外部資源檔存放的位置, 可以設定文字、圖片、XML等

     drawable : 存放 icon圖片的地方。layout : 存放畫面設定檔,values : 存放常數資源檔。

另外還有一個「Gradle Scripts」目錄,儲存與Gradle建置系統相關的設定檔,Gradle是Android Studio採用的全新應用程式建置系統。在Android Studio開發Android應用程式,一個應用程式可以有多個模組(Module)。例如一個音樂播放應用程式,可以包含行動電話、平板電腦、穿戴式三個模組,每一個模組都可以被建置成一個獨立的App。在Gradle Scripts目錄有下列兩個主要的設定檔,它們都是Groovy格式的文字檔:

•build.gradle(Project:專案名稱):應用程式最頂端的Gradle設定檔。以前面建立的應用程式專案來說,名稱是「build.gradle(Project:HelloAndroid)」。

•build.gradle(Module:模組名稱):每一個模組的Gradle設定檔。以前面建立的應用程式專案來說,名稱是「build.gradle(Module:app)」。 

Android程式開發相關名詞

• Activity:在Android上執行的一個處理程序(不一定有畫面)稱之(類似於.NET的Form表單)

• View:Activity上的顯示元件,可以組成UI(類似於.NET的Control物件)

• Component: 組成Android程式的基礎,包括Activity、Service、Broadcast Receiver、Content provider

• Service:沒有UI的執行程序(例如在背景放音樂)

• Broadcast Receiver:負責接收廣播訊息,例如時區更新、電池儲量等資訊

• Content provider:資料提供者,例如檔案與SQLite資料庫

• Intent:啟動Component的發動者,可看成是對應的處理事件(.NET程式的稱呼)

#---------------------------------

下面我們將錄如何快速地建立一個專案,編輯內容及執行專案。這些步驟可以不是一步步的設定步驟,但最主要是要用一種概況的方式來記錄過程,所以有些不明白步驟需要再查詢其他文件。

參考資料 http://androidstation.pixnet.net/blog/post/212863265

第一步驟 : 我的第一個Android程式-設定專案資訊

 Application Name:程式執行時顯示在螢幕上方的程式標題,例如可以輸入「我的第一個Android程式」。
2. Project Name:自己幫此專案取一個名字,例如my first android app。
3. Package Name:就字義上來說是套件名稱,但是其實這個欄位是決定程式檔在專案資料夾中的儲存路徑,它是用網址的格式表示,但是是從大區域到小區域而不是網址慣用的小區域到大區域,例如可以輸入com.myandroid.(專案名稱),注意至少要有兩層,也就是xxx.xxx。

其它欄位使用預設值即可,最後按下Next按鈕。

第二步驟 : 設定專案Activity資訊 (下面為Controller設計)

 

 

1. Activity Name: 這是主程式類別的名稱,主程式類別就是程式開始執行的地方,主程式類別預設會繼承Activity類別,我們可以使用預設名稱即可。
2. Layout Name:決定程式的「介面佈局檔」名稱,「介面佈局檔」是用來設計程式的操作畫面,它是一個xml格式的檔案,我們同樣使用預設名稱即可。
 
接下來請展開「app/java/com.xxx.xxxx/MainActivity」類別,如下:
 
 
 
第三步驟 : 設定專案資源檔資訊 (下面為UI設計)
編輯 /res/values/strings.xml檔
我們可以在原始碼模式將檔案中的hello_world字串內容改成「你好,這個程式的主類別名稱叫做MainActivity」如
下:
 

<?xml version="1.0" encoding="utf-8"?>
<resources>
      …(其它程式碼)
      <string name="hello_world ">你好,這個程式的主要類別名稱叫做MainActivity</string>
</resources>

 

第四步驟 : 設定專案「介面佈局檔」
編輯res/layout/activity_main.xml 
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <TextViewstyle="@style/Widget.SampleMessage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/horizontal_page_margin"
        android:layout_marginRight="@dimen/horizontal_page_margin"
        android:layout_marginTop="@dimen/vertical_page_margin"
        android:layout_marginBottom="@dimen/vertical_page_margin"
        android:text="@string/intro_message"/>
 
    <GridViewandroid:id="@android:id/list"
        style="@style/Widget.SampleDashboard.Grid"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:paddingLeft="@dimen/horizontal_page_margin"
        android:paddingRight="@dimen/horizontal_page_margin"
        android:paddingBottom="@dimen/vertical_page_margin"
        android:scrollbarStyle="outsideOverlay"/>
 
</LinearLayout>
   
第六步驟 : 按下Run按鈕並開啟AVD模擬器的對話盒進行測試 
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    文章標籤
    Android
    全站熱搜
    創作者介紹
    創作者 stanley 的頭像
    stanley

    史坦利Stanley程式Maker的部落格

    stanley 發表在 痞客邦 留言(1) 人氣()