標籤:android 使用者介面設計
1. 聲明性設計
設計使用者介面的方法有兩種,過程性設計和聲明性設計。過程性設計是指用代碼設計使用者介面,例如,開發一個Swing應用程式時必須編寫Java代碼,以建立和操作所有使用介面物件。聲明性設計不涉及任何代碼,例如,在設計網頁時使用HTML,描述了期望的網頁布局,而不是如何?。
Android同時支援過程性和聲明性設計,允許開發人員使用任一風格建立使用者介面,即可以絕大部分使用Java代碼,也可以絕大部分使用XML描述符。雖然二者都是有效,但Google建議儘可能使用聲明性的XML語言,與相應的Java代碼相比,XML代碼往往更加短小易懂,而且在以後版本中發生變化的可能性不高。
Android程式是一個鬆散的活動集合,其中的每個活動都定義了一個使用者介面螢幕。R.layout.activity_main是一個資源標識符,引用了res/layout目錄中的activity_main.xml檔案,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3A/A6/wKioL1O7_G-AepLAAADtarIwDbU774.jpg" title="Other-Pic.jpg" alt="wKioL1O7_G-AepLAAADtarIwDbU774.jpg" />
2. 資源管理
activity_main.xml檔案以XML格式聲明使用者介面,在運行時,Android解析並執行個體化該檔案中已定義的資源,並將其設定為當前活動的視圖。R類是由Android Eclipse外掛程式自動管理的,無論將一個檔案放到res目錄中的哪個位置,Android Eclipse外掛程式都會注意到這一變化並自動在gen目錄的R.java檔案內添加資源ID,如果刪除或修改了某個資源檔,R.java將保持同步,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3A/A7/wKiom1O7_XTyQoKwAAMf7aYXwVY900.jpg" title="Other-Pic.jpg" alt="wKiom1O7_XTyQoKwAAMf7aYXwVY900.jpg" />Android資源管理員使用十六進位整數載入實際資料、字串,以及被編譯到軟體包中的其他資源。無需關心這些資源的值,只要記住這些值是引用資料的控制代碼,而不是引用包含資料的對象的控制代碼。需要使用對象之前不會解壓縮對象。
在Eclipse中雙擊activity_main.xml即可開啟該檔案,根據Eclipse的具體設定,雙擊activity_main.xml後出現的可能是可視化的布局編輯器,或是一個XML編輯器。單擊底部的activity_main.xml選項卡,查看XML檔案,可以看到對<RelativeLayout>的引用,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3B/4D/wKiom1O9SRTRFC-yAAGj_JzDL2w721.jpg" title="Other-Pic.jpg" alt="wKiom1O9SRTRFC-yAAGj_JzDL2w721.jpg" />
3. 布局
布局是存放一個或多個子物件及某種行為的容器,行為描述了如何將這些子物件放置在螢幕上其父物件的矩形地區中,以下是Android中最常用的幾種布局:
1) FrameLayout: 架構布局,從螢幕的左上方開始顯示子物件,主要用於選項卡視圖和映像切換器。
2) LinearLayout: 線性布局,以單列或單行的形式顯示子物件,這是最常用的布局方式。
3) RelativeLayout: 相對布局,相對於其他子物件或父物件的位置顯示子物件,這種布局常用於表單中。
4) TableLayout: 表格版面配置,以多行和多列的方式顯示子物件,類似HTML表格。
各種布局方式常用的一些參數如下:
1) xmlns: android="http://schemans.android.com/apk/res/android" 定義Android的XML命名空間,該參數只能在main.xml檔案中的第一個XML標籤處定義一次。
2) android: layout_width="fill_parent", android:layout_height="fill_parent",聲明此布局的高度和寬度與父物件的高度和寬度相同。
如果在編輯器中看到關於缺少文法約束的警告,可以儘管忽略,與將英語文本寫入程式碼到布局檔案中不同,可以使用@string/resid這種文法形式引用res/values/strings.xml檔案中的字串。根據地區設定或其他參數的設定情況,還可以有其他資源檔。此外還可以使用一種新的文法形式:@id/resid,與引用在其他地方定義的資源ID不同,這種文法形式將建立一個新的資源ID供其他對象引用。
4. 實現交談視窗
可以在螢幕上建立一個彈出提示視窗,並顯示一些與視窗有關的資訊,閱讀完這些文字後,可以按下按鈕關閉視窗。實現這個功能有多種方法:
1) 定義一個新的Activity類並啟動它。
2) 使用AlertDialog類並顯示它。
3) 子類化Android的Dialog類並顯示它。
下面將定義一個新的活動,它也需要一個布局檔案,比如將檔案命名為res/layout/activity_about.xml,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/40/54/wKiom1POZubBEJYxAAMZ_NvAS5c304.jpg" title="Other-Pic.jpg" alt="wKiom1POZubBEJYxAAMZ_NvAS5c304.jpg" />
About活動應該在AboutActivity.java檔案中定義,只需覆寫onCreate()方法並調用setContentView()方法即可,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3D/BF/wKiom1PFMCuToX_hAAFoqwgolE4522.jpg" title="Other-Pic.jpg" alt="wKiom1PFMCuToX_hAAFoqwgolE4522.jpg" />在activity_main.xml中添加一個Button,以便與About活動關聯,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3D/BF/wKioL1PFMMCwd7a1AAKFa4Rsxh8414.jpg" title="Other-Pic.jpg" alt="wKioL1PFMMCwd7a1AAKFa4Rsxh8414.jpg" />而後在MainActivity.java中添加一些匯入語句,在onCreate()方法中添加代碼以調用findViewById()和setOnClickListener()方法,findViewById()方法用於根據資源ID尋找Android視圖,setOnClickListener()方法則通知Android當使用者觸摸或單擊該視圖時應觸發哪個對象,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3D/C0/wKiom1PFNFby-lN9AAKzy6dGorA501.jpg" title="Other-Pic.jpg" alt="wKiom1PFNFby-lN9AAKzy6dGorA501.jpg" />要想在Android中啟動某個活動,首先需要建立Intent類的執行個體。Android中有兩種Intent,public的Intent是在系統級註冊的,可從任何應用程式內使用,private的Intent只能在一個應用程式內使用。此外,每個活動都需要在AndroidManifest.xml檔案中聲明,運行效果如下:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3D/C5/wKiom1PFQziQwnW4AAB14r8gx7Y751.jpg" title="Other-Pic.jpg" width="250" height="417" border="0" hspace="0" vspace="0" style="width:250px;height:417px;" alt="wKiom1PFQziQwnW4AAB14r8gx7Y751.jpg" />
5. 應用主題和菜單
主題是一個樣式集合,可用於覆寫Android組件的外觀,Android附帶了多個主題,可以通過名稱進行引用。別外,通過子類化現有主題並覆寫其預設值,使用者也可以構造自己的主題。可以在res/values/styles.xml檔案中自訂佈景主題,要使用主題,首先在編輯器中再次開啟AndroidManifest.xml檔案,然後修改About活動的定義,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/A7/wKioL1PLyFDQO33JAABuYacaGys492.jpg" title="Other-Pic.jpg" alt="wKioL1PLyFDQO33JAABuYacaGys492.jpg" />樣式名稱前的@android:首碼表示此處引用了由Android定義的資源,而不是使用者自己在程式中定義的資源,再次運行程式,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/A7/wKioL1PLyxnhqz20AACvrGQEvj8874.jpg" title="Other-Pic.jpg" width="250" height="417" border="0" hspace="0" vspace="0" style="width:250px;height:417px;" alt="wKioL1PLyxnhqz20AACvrGQEvj8874.jpg" />
Android支援兩類菜單:一種是在使用者按下Menu按鈕時彈出的菜單,另一種是使用者用手指按住螢幕不放時彈出的操作功能表。以第一種菜單為例,需要使用在res/menu/main.xml檔案中定義的菜單,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/40/54/wKiom1POZl6i3GK-AAC8BCUBppc970.jpg" title="Other-Pic.jpg" alt="wKiom1POZl6i3GK-AAC8BCUBppc970.jpg" />
再使用MainActivity類中的onCreateOptionsMenu()方法,如下所示:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/40/53/wKioL1POZ0jgCzhZAAI0o76K1cU580.jpg" title="Other-Pic.jpg" alt="wKioL1POZ0jgCzhZAAI0o76K1cU580.jpg" />
getMenuInflater()方法返回一個MenuInflater執行個體,用於從XML檔案中讀取菜單定義並將其轉換為實際的視圖,使用者選擇任何功能表項目時都將會調用onOptionsItemSelected()方法。
本文出自 “方圓之間” 部落格,謝絕轉載!
[Android]使用者介面設計