Android之ActionBar詳解

來源:互聯網
上載者:User

自android3.0來Action Bar就取代了OptionsMenu。於是就涉及了API的設定。

    1)        設定<uses-sdk android:minSdkVersion="4"  android:targetSdkVersion="11" />,表明應用程式可部署於android3.0或之前。也就是說當裝置的SdkVersion==11時,應用程式將啟動Action Bar。
但是如何應用程式想使用Action Bar API,即訪問ActionBar類。例如:添加tab、改變Action Bar風格,我們需要將minSdkVersion也設定成11。

    2)        如何讓你的Activity不使用ActionBar呢?

            i.      設定:<activity android:theme="@android:style/Theme.Holo.NoActionBar">

            ii.      i中的主題是系統內建的主題,即去掉了ActionBar的主題。如果我們自訂佈景主題,如何取消ActionBar呢?
在自訂的主題中,使用android:windowActionBar,並將它設定成false。

    3)        值得注意的是,當用2)的方法刪除了ActionBar後,在Activity中調用getActionBar()將返回null。
否則正常情況下返回ActionBar對象,然後調用show、hide操作。

    4)        定義了OptionsMenu之後,我可以選擇幾個MenuItem優先顯示在Action Bar。

            i.      在menu資源中:使用android:showAsAction屬性,設定成ifRoom。

            ii.     代碼中:MenuItem .setShowAsAction(SHOW_AS_ACTION_IF_ROOM)

    5)        通常MenuItem是帶有Icon和text屬性,作用是提示使用者識別MenuItem。當兩者都提供時,Action Bar預設顯示Icon。如果想顯示文本的話,需要

            i.       在menu資源中:使用android:showAsAction屬性,設定成ifRoom | withText。

            ii.      代碼:MenuItem .setShowAsAction(SHOW_AS_ACTION_IF_ROOM | SHOW_AS_ACTION_WITH_TEXT)

    6)        如果應用程式在某個Fragment中添加MenuItem,當點擊該MenuItem的處理步驟是這樣,Activity本身先處理,然後才會到Fragment。

    7)        預設情況下,Action Bar會在最左側添加應用程式圖示,當點擊該表徵圖與點擊MenuItem的效果是一致的,此時返回的id是android.R.id.home。同樣也是在onOptionsItemSelected中處理。

            i.        通常的處理是返回首頁,結束冗長的Activity棧。
           
           

            ii.       另一種常見的處理是向上導航功能,即可選擇Activity棧中任意Activity。代碼和效果如下,onOptionsItemSelected中的處理類似於i中的代碼:
           
           

    8)        預設情況下,Action Bar上顯示的MenuItem,都是以MenuItem的Icon或者Text顯示。
我們可以為MenuItem添加View,從而在Action Bar上顯示這個View,注意,如果Action Bar空間不足以顯示該View的話,此時MenuItem就處於”更多”菜單中,此時顯示Icon或者Text,而不是View了。
如何定義的的,通常都是在資源中為使用或者屬性。例如:

           
此時我們通常會為該View設定監聽器與使用者互動。如何在menu資源中擷取MenuItem對應的View呢?
           

    9)        Android為Action Bar提供支援Tab的功能,效果如下:
           

            i.      每個Tab都包含一個Icon和Text。通常每個Tab對應一個Fragment

            ii.      實現該效果的基本步驟
getActionBar().setNavigationMode(NAVIGATION_MODE_TABS)。在Activity的onCreate調用了setContextView之後才能調用getActionBar()。
建立ActionBar.Tab對象:actionBar.newTab(),這裡actionBar是對象不是類。
調用Tab.setText、setIcon和setTabListener。其中TabListener關聯了Fragment。這樣就實現了Tab與Fragment的關聯。
最後ActionBar.addTab()添加Tab即可。

            iii.      TabListener結構如下:
           

            iv.      getSelectedNavigationIndex()能夠擷取被選擇的Tab索引,當使用者切換前背景Activity時,根據被選擇的Tab恢複介面。

    10)     一個網站,遊戲等都需要導航,除了Tab導航之外,android系統又為Action Bar提供了下拉導航功能。

            i.        getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);使能下拉導航功能。

            ii.        actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);設定下拉導航中的導航項和點擊導航項後的事件處理。
mSpinnerAdapter是SpinnerAdapter類執行個體,即這裡的所有導航項。
mNavigationCallback是ActionBar.OnNavigationListener類執行個體,即事件監聽處理器。

            iii.       建立SpinnerAdapter
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
參數1:Context
參數2:字串數組資源<string-array name="action_list">
參數3:下拉導航中每個導航項的布局。

            iv.       建立ActionBar.OnNavigationListener
該事件監聽器主要處理,當導航項被點擊時的處理:onNavigationItemSelected。
public boolean onNavigationItemSelected(int position, long itemId) 。

    11)     Action Bar(動作欄)也是UI的一部分,如何讓它和Activity的UI的風格協調一致呢?

            i.     ActionBar.setBackgroundDrawable成員設定Action Bar的背景圖片,建議不要使用固定像素的圖片。

            ii.    ActionBar.setDisplayUseLogoEnabled成員設定Actin Bar上顯示的Icon。不再使用Application的Icon,而是使用<application>中android:logo。

            iii.    還有就是為Action Bar應用主題,預設情況Action Bar使用Theme.Holo主題。它與Theme.Holo.Light相反的主題,後者是白底黑字。
設定方法是這樣的,在manifest.xml中為Activity添加主題。當然該主題不僅僅包括的是Action Bar的樣式。

            iv.    關於Action Bar的樣式:
android:actionBarTabStyle:Tab的樣式
android:actionBarTabBarStyle:Tab下方的Bar的樣式
android:actionBarTabTextStyle:Tab中Text的樣式
android:actionDropDownStyle:下拉導航和浮動菜單的樣式
android:actionButtonStyle:按鈕的背景圖片

            v.     如何自訂佈景主題呢?通常的做法是繼承的方式,例如繼承Theme.Holo:
       

            vi.      應用該自訂的主題就很簡單了:
<application android:theme="@style/CustomActionBar"... />

            vii.     當然如果你的Activity不使用Action Bar也就沒有以上的部分了。
設定Activity的android:windowActionBar為false即可。

            viii.     拓展:設定Activity的android:windowNoTitle來使能題目欄Title Bar。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.