Presentation is loading. Please wait.

Presentation is loading. Please wait.

從 Android SDK 3.0 開始增加了 2 個新的類別: Fragment 與 Action Bar 。 Fragment 提供不同佈局畫面的另一種用法,但 設計更有彈性,更能針對螢幕大小變化,採用 最合適的設計,例如對較大螢幕的平板裝置, 它可以在一個活動的畫面同時顯示 2 個 Fragment.

Similar presentations


Presentation on theme: "從 Android SDK 3.0 開始增加了 2 個新的類別: Fragment 與 Action Bar 。 Fragment 提供不同佈局畫面的另一種用法,但 設計更有彈性,更能針對螢幕大小變化,採用 最合適的設計,例如對較大螢幕的平板裝置, 它可以在一個活動的畫面同時顯示 2 個 Fragment."— Presentation transcript:

1

2 從 Android SDK 3.0 開始增加了 2 個新的類別: Fragment 與 Action Bar 。 Fragment 提供不同佈局畫面的另一種用法,但 設計更有彈性,更能針對螢幕大小變化,採用 最合適的設計,例如對較大螢幕的平板裝置, 它可以在一個活動的畫面同時顯示 2 個 Fragment ,讓使用者操作起來更加方便。 Action Bar 的作用則有些類似視窗程式中工具列 的用途,可以將應用程式常用的功能項目以 Action Item 形式加入 Action Bar ,讓使用者更容 易找到他們所要執行的功能。

3 Fragment 類別可以看成是介於視圖與活動之 間的模組,它像視圖一樣可以加到視圖階 層中的 ViewGroup 中,它又像 Activity 般有自 己的生命循環及事件處理機制,但是它的 生命循環會受到擁有它的活動的生命循環 影響。 一個活動可以合併多個 Fragment 到它的佈局 中,也可以動態的用程式碼新增或移除 Fragment ;同一個 Fragment 也可以提供給不 同的活動使用。

4 + 因為 Fragment 有自己的佈局、行為與生命循 環,因此應該設計成可以使用的模組,且 Fragment 之間應該互相獨立,這樣的設計對 不同尺寸螢幕會更適合,因為 Fragment 之間 互相獨立,所以可以任意調配活動佈局架 構中的 Fragment 。 + Fragment 提供以下延伸類別: – ListFragment  此類 Fragment 預設包含一個受適應器 (Adapter) 管理 的 ListView 視圖元件,並提供類似 onListItemClick() 的 事件處理機制操作顯示的清單。 onListItemClick()

5 – DialogFragment  此類 Fragment 在其所屬的活動上顯示一個對話框, 它比直接使用對話框視圖元件方便的地方是,對已 經關閉的 DialogFragment ,可以透過返回堆疊 (Back Stack) 與 Back 鈕,讓它再度出現。 – PreferenceFragment  此類 Fragment 以清單方式顯示階層式喜好物件,非 常適合用於需要提供使用者設定的應用程式。

6 Fragment 一定要附屬在活動上,它的生命循環 直接受此活動影響,也就是說當一活動停止, 它的所有 Fragment 一定停止。 當活動處於活躍狀態,你可以單獨對它的 Fragment 作任何操作 ( 使它活躍、暫停或移除 等 ) 。 Fragment 在它的整個生命循環中也會執行一些 不同的方法,說明如下: – onAttach() :當 Fragment 加入到一活動時呼叫此方 法。

7 – onCreate() :當 Fragment 建立時呼叫此方法。 – onCreateView() :呼叫此方法回傳 Fragment 的使 用者介面。 – onActivityCreated() :在 Fragement 所屬活動建立 後呼叫此方法。 – onStart() :當 Fragment 的視圖成為可見時呼叫此 方法。 – onResume() :呼叫此方法後 Fragment 進入活躍 狀態,能與使用者直接互動;這方法在 Fragment 整個生命循環中,一般會呼叫許多次 ( 例如從暫停或停止狀態回到活躍狀態時都會呼 叫 ) 。

8 – onPause() :當 Fragment 進入暫停狀態,不再能 與使用者互動時呼叫此方法。 – onStop() :當 Fragment 進入停止狀態時呼叫此方 法,執行後此 Fragment 成為不可見。 – onDestroyView() :當 Fragment 的視圖被破壞時 呼叫此方法。 – onDestroy() :當 Fragment 被終止時呼叫此方法。 – onDetach() :當 Fragment 從其所屬活動中移除時 呼叫此方法。

9

10 + Fragment 在其整個生命循環中只能停留在以 下狀態: – 活躍狀態:在執行的活動中是目前顯示的介面。 – 暫停狀態:另一個活動在前景執行,但執行的 活動並未完全遮蔽此 Fragment 所屬活動。 – 停止狀態:此 Fragment 已不可見,有可能是所 屬活動進入停止狀態,或此 Fragment 從所屬活 動中移除但加入到返回堆疊中。

11 要建立一個 Fragment ,應採取以下步驟: – 建立一個延伸自 Fragment 的子類別,在這子類別 的定義中建議最好實作以下 3 個生命循環的方法: onCreate() :一般利用這個方法對一些重要元件進行初始 化動作,尤其是那些在進入暫停或停止狀態時需要保留 的資訊。 onCreateView() :當 Fragment 第一次建立它使用者介面時 呼叫此方法;要建立 Fragment 的使用者介面,必須從此 方法回傳 Fragment 佈局的根視圖 ( 即最上層視圖 ) ,如果沒 有使用者介面,則回傳 null 。 onPause() :一般在這個方法中儲存 Fragment 目前的狀態 與資料,以便將來此 Fragment 再回到活躍時能繼續之前 的處理。

12 – 增加使用者介面 要提供 Fragment 佈局,必須實作 onCreatView() 方法,在 這方法中利用 LayoutInflater 物件的 inflate() 方法,從專案 資源資料夾 (/res/layout/) 取得佈局 XML 定義檔。 inflate() 方法需要 3 個參數,第 1 個指定 Fragment 要使用的 佈局 XML 定義檔,第 2 個是此 Fragment 所屬活動佈局的 ViewGroup ,第 3 個為布林值, false 表示將 Fragment 佈局 根視圖加至第 2 個參數的 ViewGroup 中。 如果建立的是繼承自 ListFragment 的 Fragment ,預設的 onCreateView() 方法已經回傳 ListView 視圖,因此不必再實 作此方法。 – 將 Fragment 加至活動佈局,有 2 個方法可以將 Fragment 加到活動佈局中,一是在活動佈局定義檔 中用 標籤設定 Fragment ,這種方式能像 加入其他視圖元件般設定 Fragment 的屬性,另一種 方法是透過 Java 程式,將 Fragment 加到現存的 ViewGroup 中。

13 + Frag1 Test 範例詳細內容請參考原書。

14 Android SDK 為了讓程式具有管理 Fragment 的能 力,另外設計了 2 個類別:「 FragmentManager 」 與「 FragmentTransaction 」。 Android 系統將 Fragment 的改變視為是一種交易, 這交易以 FragmentTransaction 物件負責;但要 交易必須由 FragmentManager 物件以 「 beginTransaction() 」方法開啟,且設定好交 易內容之後,必須由 FragmentTransaction 物件 的「 commit() 」方法確認交易成立。

15 + FragmentTransaction 提供的交易內容 ( 即執行 的方法 ) 主要有 3 個,分述如下: – add() :將 Fragment 加入指定的視圖容器;此方 法需要 2 個參數,第 1 個是此容器的識別碼 (id) , 第 2 個是要加入的 Fragment 。 – replace() :以指定的 Fragment 取代目前的 Fragment ;此方法同樣也需要容器識別碼 (id) 與 要加入的 Fragment 。 – emove() :將指定的 Fragment 從佈局中移除,這 方法需提供要移除 Fragment 的標籤。

16 DynamicFragment Test 範例 – 活動佈局原只有 2 個按鈕:「 Show Fragment 」 與「 Change Fragment 」。 – 當使用者敲「 Show Fragment 」鈕,會將 「 FragmentClass1 」加入活動佈局,此 Fragment 以 TextView 元件顯示「 I am Fragment No.1 」訊 息。 – 當使用者敲「 Change Fragment 」鈕,則以 「 FragmentClass2 」取代活動佈局中的 「 FragmentClass1 」,此 Fragment 則以 TextView 元件顯示「 I am Fragment No.2 」訊息。 – 範例詳細內容請參考原書。

17 + 在一個活動中包含多個 Fragment 設計方式與 單 Fragment 設計差別並不大,主要是記得在 Fragment 的程式碼中,要取得自己 Fragment 內的視圖元件時需要使用 「 getView().findViewById(int) 」方法,而要 取得其他 Fragment 內的視圖元件時則必須使 用「 getActivity().findViewById(int) 」方法。

18 DualFragment Test 範例 – 設計一個含有 2 個 Fragment 的活動,第一個 Fragment 繼承自 ListFragment 類別,用以顯示員 工姓名清單。 – 為了能與清單內容產生互動,因此實作了 OnItemClickListener 與 onItemClick() 事件處理方 法。 – 在 onItemClick() 事件處理中,取得被敲項目的索 引值,然後用此索引值取得此員工對應的資料, 並用 – \ 範例詳細內容請參考原書。 – 另一個 Fragment 顯示。

19 Action Bar( 行動列 ) 是位於裝置螢幕頂端的介 面元件,是 Android SDK 3.0(Honeycomb , API 11) 才釋出的元件,它最左端顯示目前在 前景執行的應用程式圖示或標誌,最右端 為「溢流選單」。 Action Bar 主要的目的如下: – 提供專用空間顯示應用程式圖示或標誌,讓使 用者很容易瞭解它目前操作的對象。 – 提供不同應用程式相同的操作與導覽介面。

20 – 使活動的一些關鍵動作更加顯著,並提供符合 使用者預期的操作方式。 + 控制與設定 Action Bar – Action Bar 是否出現在活動畫面上可以經由 AndroidManifest.xml 檔案或在活動程式碼中設 定,但二者不一樣。 – 在 AndroidManifest.xml 檔案中,可以在 標籤內用 「 android:theme="@android:style/Theme.Holo.N oActionBar" 」抑制 Action Bar 出現,但設定之後 就無法再讓 Action Bar 出現。

21 – 在活動程式碼中也可以建立 ActionBar 實體物件,並 透過此物件的方法設定 Action Bar 的屬性。在活動 程式碼中的 onCreate(Bundle) 方法增加以下程式碼, 則 Action Bar 會隱藏起來。 ActionBar actionBar=getActionBar(); actionBar.hide(); – 也會經常進行以下的設定: 在 Action Bar 上恢復顯示應用程式圖示 actionBar.setDisplayUseLogoEnabled(false); 取消 Action Bar 顯示應用程式標題 actionBar.setDisplayShowTitleEnabled(false); 設定 Action Bar 背景圖形或顏色 actionBar.setBackgroundDrawable( new ColorDrawable(0x555500));

22 在 Action Bar 上增加 Action Item – 在 Action Bar 上一般會有 Action Item( 行動項目 ) 、 Action View( 行動視圖 ) 等,甚至可以設計有分頁標 籤。 – Action Item 是來自活動選項選單 ( 以裝置的「 Menu 」 鍵開啟 ) 中的選項,要將選項移成 Action Bar 上的 Action Item( 移動後選項選單中將無此選項 ) ,可以 直接在選項選單 XML 定義檔中 ( 位於「 /res/menu/ 」 目錄 ) ,選項標籤 內設定 「 android:showAsAction=”ifRoom|withText 」。 – 其中第 1 個值「 ifRoom 」是表示如果 Action Bar 還有 空間,則將此選項移到 Action Bar ,如果空間不足 就不要移動。

23 – 也可以利用活動的程式碼將選項從選單移到 Action Bar 。在活動類別定義中,是在 「 onCreateOptionsMenu(Menu) 」方法中,透過 MenuInflater 物件的 inflate() 方法,從指定選單的 XML 定義檔實作選項選單;因此如果有需要, 也應該在這個方法內用選項物件「 MenuItem 」 的「 setShowAsAction() 」方法,建議是否能將 此選項移到 Action Bar 。 menuItem.setShowAsAction (MenuItem.SHOW_AS_ACTION_IF_ROOM| MenuItem.SHOW_AS_ACTION_WITH_TEXT);

24 – ActionItem Test 範例  在選單 XML 定義檔中增加了一些選項,並於定義檔 中將一個選項移到 Action Bar 。  另於活動類別定義檔的 onCreateOptionsMenu(Menu) 方法中,再將 2 個選項移到 Action Bar 。  範例詳細內容請參考原書。 – 對移到 Action Bar 的 Action Item ,它在使用者點 選之後,同樣還是會呼叫 「 onOptionsItemSelected(Menu) 」方法。 + 在 Action Bar 上增加 Action View – 要為 Action Bar 增加 Action View ,請依以下步驟 進行:

25  建立一個佈局檔含有需要的視圖元件,此檔應位於 「 /res/layout/ 」目錄。  將此佈局加入選項選單 (main.xml) 成為一個選項;除 了在 標籤內要設定 「 android:actionLayout="@layout/ 佈局檔名 " 」以外, 與其它選項的設定相同。  設定屬性 「 android:showAsAction=”ifRoom|withText 」,就能 將它移到 Action Bar 。

26 + 在 Action Bar 上設計分頁功能主要是透過 Fragment ,每一頁都是一個獨立的 Fragment , 這些 Fragment 可以加入活動佈局中的視圖容 器,或直接加到活動程式內。 + 要讓 Action Bar 具有分頁功能,首先需將 Action Bar 設為分頁導覽模式,設定方式如 下: actionBar.setNavigationMode (ActionBar.NAVIGATION_MODE_TABS);

27 + 接著再用 Action Bar 的「 newTab() 」方法建 立新頁,並將此頁用 Action Bar 的 「 addTab(Tab) 」方法加到 Action Bar 中。 + 因為每一頁是一個獨立的 Fragment ,因此換 頁就是進行 Fragment 的交易 (FragmentTransaction) ,為了處理 Fragment 交易,我們需要自己實體化 「 ActionBar.TabListener 」介面,這介面擁有 頁面被選取與取消選擇的抽象方法,透過 實作這些方法,就能處理頁面更換的事宜。

28 建立 Action Bar 分頁功能步驟如下: – 建立各頁需要的 Fragment 類別與佈局。 – 實作「 ActionBar.TabListener 」介面及其所含的抽象 方法,包括建構函式、 onTabSelected(Tab, FragmentTransaction) 、 onTabUnselected(Tab, FragmentTransaction) 、 onTabReselected(Tab, FragmentTransaction) 等方法,這個偵聽器類別主要 處理 Fragment 的交易,但要注意在此類別中不能執 行交易的「 commit() 」方法,因為系統會自動執行。 – 在活動類別定義檔內,用 ActionBar 建立新的頁面, 設定此頁面標籤與設定換頁偵聽器。 ActionBarTab Test 範例詳細內容請參考原書。


Download ppt "從 Android SDK 3.0 開始增加了 2 個新的類別: Fragment 與 Action Bar 。 Fragment 提供不同佈局畫面的另一種用法,但 設計更有彈性,更能針對螢幕大小變化,採用 最合適的設計,例如對較大螢幕的平板裝置, 它可以在一個活動的畫面同時顯示 2 個 Fragment."

Similar presentations


Ads by Google