使用 Android ActionBarCompat 製作導覽列 (1)

ActionBar

什麼是 ActionBar 呢?其實就是導覽列,說法不同,概念雷同,在 Android 中,把導覽列上的功能選單稱為 Action button,所以整個導覽列就稱為 ActionBar,要瞭解它的概念及設計準則,可以參考官網的說明,這裡只做快速整理說明。

關於 ActionBar

ActionBar 是一個固定在螢幕上方的一塊區域,橫跨整個 App,並提供可操作的 Action (選單)。 圖片來源:
http://developer.android.com/design/media/action_bar_basics.png

ActionBar 的組成元件有 4 個:
  1. App icon:App 的圖示,可以提供回上一頁的功能(會有一個往左的箭號)。
  2. View control:提供下拉式選單,用來切換不同的 view。
  3. Action buttons:可以給使用者點選的選單。
  4. Action overflow:在最右邊的直式的 3 個點。當 Action buttons 數量太多的時候,多的 Action 可以隱藏到 overflow 中,當使用者點選時才顯示。(但也可以指定全部的 Action 都縮到 overflow 中)

分割 ActionBar 的版面組成

圖片來源:
http://developer.android.com/design/media/action_bar_pattern_considerations.png 主要有 3 個部份:
  1. Main action bar (主要,最上方的導覽列,通常在整個 App 中都會出現)
  2. Top bar (上方列,以 tab 標籤頁的方式呈現)
  3. Bottom bar (下方列,以 toolbar 工具列的方式呈現)

Action Buttons 設計準則

在不同的頁面只出現該頁面所需要的 Action,把無關的 Action 隱藏。不常用或不重要的 Action 請把它放到 overflow 中。
你可以在這裡下載 Action Bar 的圖示包

關於 ActionBarCompat

在 Android 中最麻煩的事就是向下相容,ActionBar 是從 Android 3.0 (API level 11) 才出現的,所以如何讓你的 App 在這之前的 Android 版本的裝置中顯示 ActionBar 就必須使用支援套件。在介紹 ActionBarCompat 之前,得先介紹 ActionBarSherlock。

ActionBarSherlock

ActionBarSherlock 是非官方的 ActionBar 支援套件,向下支援到 Android 2.x 版,一開始官方並沒有提供向下支援的套件,所以大部份的人都是使用這個"夏洛克"版的支援套件。在用法上和原始版的 ActionBar 差不多,只是有些微不同,例如在 ActionBarSherlock 是使用 getSupportActionBar() 來取得 ActionBar,而官方正式版本則是 getActionBar()。

後來官方出了向下相容的套件 ActionBarCompat 後,我就在某個機會下轉到 ActionBarCompat,當然是因為 ActionBarCompat 的支援更全面,說明文件比較齊全,而且是官方的,感覺比較穩當些,不用擔心萬一"夏洛克"版沒人維護了,到時又要重新修改,想到就累。

從 ActionBarSherlock 轉移到 ActionBarCompat

老實說,在 ActionBar 的製作中"浪費"了不少時間,主要是因為要向下相容,不然這些問題其實都不會出現,直接用正式版的 ActionBar 即可。

說明一下轉換的經過,我原本的 App 全部都由 Activity 組成,支援到 Android 2.1 版,當我第一次想要使用 ActionBar 時,發現官方的 ActionBar 只支援到 Android 3.0,所以必須找到可以向下相容到 Android 2.1 的套件,因此才使用 ActionBarSherlock。

接著花了超多時間,把原本的 Activity 轉成 Fragment,如此才能使用 ActionBar 。後來想要使用官方的 Navigation Drawer 來製作側選單,結果發現好像和 ActionBarSherlock 合不太起來,冏了!!但 ActionBarSherlock 本身也有提供 Drawer 就是了,也就是說,只能二選一,選 ActionBarSherlock 就只能用它提供的 Drawer,否則就必須全部換成 ActionBarCompat。由於 ActionBarSherlock 是非官方的,前面說過,我真的很怕它未來不在維護了,到時就麻煩,甘脆一點,現在痛一痛,就又花了"一點"時間換成 ActionBarCompat。

我的 Activity 變成 SherlockFragmentActivity 後,又變成 ActionBarActivity;某些 Activity 則是變成 SherlockFragment 後,又變成 Fragment。官方的名稱簡潔了些,但要特別注意到套件名稱,必須是 android.support.v7.app.ActionBarActivity 及 android.support.v4.app.Fragment。

這裡有一篇教你如何從 ActionBarSherlock 轉移到 ActionBarCompat,步驟如下:
步驟1:
匯入 support v7 library。它是一個 Library Project 位置在 sdk\extras\android\support\v7\appcompat (sdk 指你安裝的 Android sdk 根目錄)。

在 Eclipse 中 File -> Import -> Android -> Existing Android Code Into Workspace,去選到該路徑把專案加進來。

接著在 Eclipse 對你的專案按右鍵 -> Properties -> (左邊選)Android -> 右邊下方的 Library -> Add,加入剛才匯入的 appcompat library project。
步驟2:
把所有的 SherlockFragmentActivity 換成 ActionBarActivity (必須是android.support.v7.app.ActionBarActivity)。
步驟3:
把所有的 SherlockFragment 換成 Fragment (必須是android.support.v4.app.Fragment)
步驟4:
更換 Menu, MenuItem and getSupportMenuInflater() 的參考。
步驟5:
修改取得 Action Views 的方法。
步驟6:
修改 Themes and Styles。你可以使用 Action Bar Style 產生器 來製作。

續:使用 Android ActionBarCompat 製作導覽列(2)
本文網址:http://blog.tonycube.com/2014/02/android-actionbarcompat-1.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。