Android軒轅劍之ActionBar之一

傳送門 ☞ 輪子的專欄 ☞ 轉載請註明 ☞ http://blog.csdn.net/leverage_1229

        Action Bar是一個能用於確定應用程序和用戶的位置,並提供給用戶操作和導航模式的窗口功能。如果需要顯著地展示當前用戶的操作或導航,應該使用Action Bar,因爲Action Bar爲用戶提供了一個統一的跨應用程序和系統的接口,並且針對不同尺寸的屏幕優雅的處理了Action Bar的適配。你可以通過ActionBar API來控制它的行爲和可視性,這些API添加於Android 3.0(API級別爲11)。 

1設計目的

1.1提供一個專門的空間來確定應用程序的標識和用戶的位置。

        這是在應用程序圖標或者是左側的logo以及Activity的標題幫助下完成的。如果當前視圖的導航標籤被標識,例如當前選項卡選中,你可能會選擇刪除該Activity名稱。

1.2提供統一的導航和視圖細化到不同的應用程序中。

        Action Bar提供了內置選項卡導航來進行在fragments之間切換。它還提供了一個下拉列表中,可以來用來替代導航模式或用來完善當前視圖(比如按照不同的標準來排序列表)。

1.3突出Activity的關鍵動作(如“搜索”、“創建”、“共享”,等),便於用戶一個可預測的訪問。

        對於關鍵的用戶操作,你可以通過將item從選項菜單直接在操作欄定義爲action items來提高訪問速度。action items也可以提供一個“action view”,它用一個嵌入式widget來提供更多及時的動作行爲。沒有晉升爲成action items的菜單項在溢出菜單中還是有效的,用戶既可以使用設備上的菜單按鈕(設備上有按鈕的時候),也可以使用Action Bar中的溢出菜單按鈕(當設備上不包含菜單按鈕時)。

2添加Action Bar

        從Android3.0(API level 11)開始,Action Bar包括在所有Activity中使用的Theme.Holo主題(或是繼承Activity的一個子類),這是當targetSdkVersion或minSdkVersion屬性設置爲“11”或更高時程序默認的主題。
<manifest ... >

    <uses-sdk android:minSdkVersion="4"

              android:targetSdkVersion="11" />

    ...

</manifest>

        在這個例子中,應用程序設置的最低版本的API Level爲4(Android 1.6),但它目標API級別爲11(Android 3.0)。通過這樣設置,當應用程序運行在Android 3.0或更高版本上時,系統爲每個Activity應用Holo主題,因此,每一個Activity都包含Action Bar。如果你想使用Action Bar的API,比如添加導航模式和修改操作欄樣式,你應該設置minSdkVersion爲“11”或是更高的版本。如果你想你的應用程序支持舊版本的Android,有很多辦法可以讓低版本的ActionBar的API的在支持API級別爲11或更高的設備上,同時仍運行舊版本。

2.1移除Action Bar

        如果你不想爲一個特定的Activity設置Action Bar,那麼可以設置Activity主題爲Theme.Holo.NoActionBar。
<activity android:theme="@android:style/Theme.Holo.NoActionBar">

2.2隱藏Action Bar

        也可以在運行時通過調用hide()隱藏Action Bar。
ActionBar actionBar = getActionBar();

actionBar.hide();
        當Action Bar隱藏時,系統會調整Activity的佈局來填充所有可用屏幕空間。當然你可以通過調用show()顯示Action Bar。 隱藏和刪除Action Bar可能會使Activity重新調整佈局。如果你的Activity經常隱藏和顯示Action Bar(如在Android的畫廊應用),你可能想用覆蓋(Overlay)模式。覆蓋模式佈局在Activity的上層,而不是在同一層下的Activity的頂部。這樣,你的佈局可以在Action Bar隱藏和重新出現時保持不變。要啓用覆蓋模式,創建Activity主題並且將android:windowActionBarOverlay屬性值設置爲true。注意:如果你有一個自定義的的Activity主題並且想在其中刪除Action Bar,然後把android:windowActionBar樣式屬性設置爲false。,那麼,由於你移除了Action Bar正在使用的主題,那麼getActionBar()方法將返回null,當你和系統調用此方法的時候就會出現問題。

3添加Action Items

        有時你可能想讓用戶從選項菜單(options menu)中直接訪問item。要做到這一點,你可以聲明該菜單項爲Action Bar中的一個“action item”。一個“action item”包括一個圖標和/或文字標題。如果一個菜單項不作爲一個“action item”,系統會將菜單項放置在溢出菜單。溢出菜單顯示設備菜單“按鈕(如果設備提供)或在操作欄中的按鈕(如果設備不提供”菜單“按鈕)。首次啓動Activity時,系統通過在activity調用onCreateOptionsMenu()方法來填充action bar和溢出菜單(overflow menu)。在菜單開發指南中討論的,它是在這個回調方法,你應該在inflate一個XML定義菜單項的菜單資源。
@Override

public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();

    inflater.inflate(R.menu.main_activity, menu);

    return true;
}


        在XML文件中,你可以通過聲明android:showAsAction="ifRoom" 讓菜單item成爲action item。通過這種方式,當有可用空間時,菜單項纔會出現在action item的快速訪問欄。如果沒有足夠的空間,該item將出現在溢出菜單。如果你的菜單項同時提供標題和圖標--同時具有Android:titile和android:icon屬性,action item默認只會顯示圖標。但如果你想顯示文字標題,必須添加“withText”到Android:showAsAction屬性中。

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/menu_save"

          android:icon="@drawable/ic_menu_save"

          android:title="@string/menu_save"

          android:showAsAction="ifRoom|withText" />

</menu>
        注:“withText”值應用用於一個Action Bar的提示文本出現。但如果一個圖標無法使用或者空間受限,action bar的標題可能無法顯示。
        當用戶選擇一個action  item,activity調用一個OptionsItemSelected()方法,通過android:id屬性獲取的ID值來接收在選項菜單中的所有item中相同的回調。 這一點很重要,你總是爲每個菜單項定義android:title,你不在顯示的action item中聲明標題的理由有三個:
如果在action bar中沒有足夠的空間提供給action item,該菜單項出現溢出“菜單中,而且只有標題顯示。
屏幕閱讀器爲視障用戶讀出菜單項的標題。
如果action item只有圖標,用戶可以長按item顯示的工具提示,顯示action item的標題。
        Android的圖標始終是可選的。
        你也可以定義一個item“always”爲action item,以避免當空間有限時被放到溢出菜單中去。但在大多數情況下,不應該設置“always”這個值來強制使一個item出現在action bar中。要注意的是過多的action item,會導致創建出來的UI雜亂不堪,並且在窄屏幕的設備上會出現佈局問題。最好使用“ifRoom”,在沒有足夠的空間時,應允許系統將它移動到溢出菜單。

3.1選項你的Action items

        你應該應通過評估的幾個關鍵特性,仔細從選項菜單中選出action item。在一般情況下,每個action item,至少有以下需求之一:
3.1.1常用性:用戶70%的時間需要訪問或需要連續多次使用。常用性例子:在短信息應用程序的“新信息”和Google Player中的“搜索(Search)”。
3.1.2重要性:用戶能夠很容易地發現,或者如果不經常使用,在少數情況用戶確實需要它的時候,可以毫不費力地執行,這一點是很重要的。重要性例子:在 Wi-Fi設置“加入網絡”和在畫廊(Gallery)應用程序中“切換到相機”。
3.1.3典型性:這是一個通常在類似的應用程序的action bar中提供的action,因此,用戶希望自己找到它。典型性例子:電子郵件應用中的“刷新”和電話本應用中的“新的聯繫人”。
        如果你認爲四個以上菜單項可以合理的作爲action item,那麼你應該仔細考慮其相對等級的重要性,並儘量設置不超過四個的菜單項的action item(這樣設置“ifRoom”這個值,在一些空間有限的小屏幕上,系統把一些菜單項放到溢出菜單背面)。即使是寬屏幕上,你也不要創建一個雜亂的UI的action item,冗長得看起來像一個桌面工具欄,應該要使action item的數量保持到最低限度。 此外,下列行爲不應該出現行動項目中:類似設置,幫助,反饋,或查找,始終將這些放在溢出菜單中。

3.2使用分離(split)的Action Bar

        當你的應用程序運行在Android 4.0系統(API Level 14)或更高時,還有一個額外的模式可稱action bar爲“split action bar”。當在一個狹窄的屏幕運行啓用split action bar時,會在屏幕的底部出現一個action bar顯示所有action item。split action bar用來分開action item,確保分配合理數量的空間來在一個狹窄的屏幕上顯示所有的action item,而空間留給頂端的導航和標題元素。 使用 split action bar,只需添加uiOptions=“splitActionBarWhenNarrow”,到你的<activity>或<application> manifest中。

        要知道Android在各種不同的方式,根據當前的屏幕大小調整action bar的外觀。採用split action bar只是一個選項,您可以啓用允許action bar進一步爲不同的屏幕尺寸,優化用戶體驗。這樣做,你也可以讓action bar可以摺疊成主要的action bar的導航標籤(navigation tabs)。也就是說,如果你在你的action bar中使用的導航標籤,一旦action items狹窄的屏幕上分離,導航標籤可以融入的主要action bar,而不是被分隔成的“摺疊的action bar”。具體來說,如果你禁用action bar中的圖標和標題(setDisplayShowHomeEnabled(false)和setDisplayShowTitleEnabled(false)),然後將主要action bar的導航標籤相互重疊。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章