Android軒轅劍之ActionBar之四

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

8添加下拉式導航

        作爲Activity內部的另一種導航(或過濾)模式,操作欄提供了內置的下拉列表。下拉列表能夠提供Activity中內容的不同排序模式。
        啓用下拉式導航的基本過程如下:
創建一個給下拉提供可選項目的列表,以及描畫列表項目時所使用的佈局;
實現ActionBar.OnNavigationListener回調,在這個回調中定義當用戶選擇列表中一個項目時所發生的行爲;
用setNavigationMode()方法該操作欄啓用導航模式;
ActionBar actionBar = getActionBar();

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        注意: 你應該在activity的onCreate()方法中執行以上代碼。
用setListNavigationCallbacks()方法給下拉列表設置回調方法。
actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);

9Action Bar的樣式

        如果你對應用程序中的可視構件進行了定製化的設計,那麼你可能也會要對action bar做一些重新設計,以便跟應用程序的設計匹配。要這樣做的話,需要使用Android的樣式與主題框架中的一些特殊的樣式屬性來重新設置操作欄的樣式。
        注意:改變外觀的背景圖片依賴與當前按鈕的狀態(選擇、按下、解除選擇),因此需要使用state list drawable。還要確保使用NinePatch類型的drawable資源,以便允許圖片的拉伸。NinePatch類型的圖片應該比40像素高30像素寬的圖片要小(mdpi下)。

9.1普通樣式

android:windowActionBarOverlay:這個屬性聲明瞭操作欄是否應該覆蓋Activity佈局,而不是相對Activity的佈局位置的偏移。這個屬性的默認值是false。
        通常,在屏幕上,action bar需要它自己的空間,並且把剩下的空間用來填充Activity的佈局。當action bar是覆蓋模式時,Activity會使用所有的有效空間,系統會在Activity的上面繪製action bar。如果你想要在action bar隱藏和顯示時,佈局中的內容保持固定的尺寸好位置,那麼這種覆蓋模式是有用的。你也可能只是爲了顯示效果來使用它,因爲你可以給action bar設置半透明的背景,以便用戶依然能夠看到action bar背後的Activity佈局。
        注意:默認情況下,Holo主題會用半透明背景來繪製action bar。但是,你能夠用自己的樣式來修改它,並且默認的情況下,DeviceDefault主題在不同的設備上可能使用不透明的背景。
        覆蓋模式被啓用時,Activity佈局不會感知到action bar覆蓋在它的上面,因此,在action bar覆蓋的區域,最好不要放置一些重要的信息或UI組件。適當的情況下,你能夠引用平臺的actionBarSize值來決定操作欄的高度,例如,在XML佈局文件中引用這個值。
<SomeView

    ...

    android:layout_marginTop="?android:attr/actionBarSize" /> 
        你還能夠用getHeight()方法在運行時獲取action bar的高度。如果在Activity生存週期的早期調用這個方法,那麼在調用時所反映的action bar的高度可能不包括被堆放的action bar(因爲導航選項標籤)。要看如何在運行時判斷action bar總的高度,請看simple中Honeycomb Gallery的TitlesFragment類。

9.2Action Items

android:actionButtonStyle:給操作項按鈕定義樣式資源。
android:actionBarItemBackground:給每個操作項的背景定義可描畫資源(被添加在API Level 14中)。
android:itemBackground:給每個溢出菜單項的背景定義可描畫資源。
android:actionBarDivider:給操作項之間的分隔線定義可描畫資源(被添加在API Level 14中)
android:actionMenuTextColor:給顯示在操作項中文本定義顏色。
android:actionMenuTextAppearance:給顯示在操作項中文本定義樣式資源。
android:actionBarWidgetThem:給作爲操作視窗被填充到操作欄中的可視構件定義主題資源(被添加在API Level 14中)。

9.3導航標籤

android:actionBarTabStyle:給操作欄中的選項標籤定義樣式資源。
android:actionBarTabBarStyle:給顯示在導航選項標籤下方的細條定義樣式資源。
android:actionBarTabTextStyle:給導航選項標籤中的文本定義樣式資源。

9.4下拉列表

android:actionDropDownStyle:給下拉導航列表定義樣式(如背景和文本樣式)。
    下面例子XML文件中給action bar定義了一些定製的樣式。
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <!--應用程序或activity應用的主題-->

    <style name="CustomActivityTheme" parent="@android:style/Theme.Holo">

        <item name="android:actionBarTabTextStyle">@style/CustomTabTextStyle</item>

        <item name="android:actionBarDivider">@drawable/ab_divider</item>

        <item name="android:actionBarItemBackground">@drawable/ab_item_background</item>

    </style>

    <!--  action bar標籤文本樣式-->

    <style name="CustomTabTextStyle" parent="@android:style/TextAppearance.Holo">

        <item name="android:textColor">#2456c2</item>

    </style>

</resources>
        注意:一定要在<style>標籤中聲明一個父主題,這樣定製的主題可以繼承所有沒有明確聲明的樣式。在修改action bar樣式時,使用父主題是至關重要的,它會讓你能夠簡單的覆寫你想要改變的action bar樣式,而不影響你不想修改的樣式(如文本的外觀或操作項的邊緣)。
        你能夠在清單文件中把定製的主題應用到整個應用程序或一個單獨的Activity對象。
<application android:theme="@style/CustomActivityTheme" ... />

9.5高級樣式

        如果需要比上述屬性更高級的樣式,可以在Activity的主題中包含android:actionBarStyle和android:actionBarSplitStyle屬性。這兩個屬性的每一個都指定了另一種能夠給action bar定義各種屬性的樣式,包括帶有android:background、android:backgroundSplit、android:backgroundStacked屬性的不同背景。如果要覆蓋這些action bar樣式,就要確保定義一個像Widget.Holo.ActionBar這樣的父action bar的樣式。
        例如,如果要改變操作欄背景,你可以使用下列樣式:
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <!-- 應用程序或activity應用的主題 -->

    <style name="CustomActivityTheme" parent="@android:style/Theme.Holo">

        <item name="android:actionBarStyle">@style/MyActionBar</item>

         </style>

    <!-- action bar backgrounds 樣式-->

    <style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">

        <item name="android:background">@drawable/ab_background</item>

        <item name="android:backgroundStacked">@drawable/ab_background</item>

        <item name="android:backgroundSplit">@drawable/ab_split_background</item>

    </style>

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