Actionbar簡介

原文出處:http://www.ccbu.cc/android/actionbar-intro

ActionBar是Android 3.0以后Anrdoid系統增加的導航欄功能控件。它標識了用戶當前操作界面的位置,并提供了額外的用戶動作、界面導航等功能。使用ActionBar的好處是,它可以給提供一種全局統一的UI界面,使得用戶在使用任何一款軟件時都懂得該如何操作,并且ActionBar還可以自動適應各種不同大小的屏幕。由于ActionBar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的話則需要引入Support Library。

1 . 系統默認Actionbar用法簡介

首先介紹在Android 3.0以上的系統中使用系統默認的Actionbar的使用方法。在3.0以上的系統中,通過直接集成最基礎的Activity即可使用Actionbar。

在onCreate中設置Actionbar

ActionBar actionBar = getActionBar();
if (actionBar != null) {
    actionBar.setLogo(R.drawable.ic_logo);//自定義logo
    actionBar.setDisplayUseLogoEnabled(true);//使能用戶自定義logo
    actionBar.setHomeButtonEnabled(true);//設置actionBar的Home鍵可點擊
}

在子界面中我們可以配置返回上一級的操作,此時actionbar中會多出一個返回箭頭。onCreate中可以做如下的操作:

mActionBar = getActionBar();
if (mActionBar != null){
    mActionBar.setDisplayHomeAsUpEnabled(true);//設置Home按鍵作為返回上一級
    mActionBar.setDisplayShowHomeEnabled(false);//不顯示Home鍵Icon
}

另外還需要在AndroidManifest.xml的Activity中配置android:parentActivityName屬性。

<activity
    android:name="SubActivity"
    android:parentActivityName="ParentActivity"/>

2 . **為Actionbar添加菜單項 **

首先需要在res/menu/下新建一個menu文件menu_set.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.test.test.MainActivity">
    <item
        android:id="@+id/refresh"
        android:orderInCategory="100"
        android:title="/刷新"
        android:icon="@drawable/ic_refresh"
        android:showAsAction="always"/>
    <item
        android:id="@+id/setting"
        android:orderInCategory="100"
        android:title="設置"
        android:icon="@drawable/ic_settings"
        android:showAsAction="ifRoom"/>
    <item
        android:id="@+id/play"
        android:orderInCategory="100"
        android:title="退出"      
        android:icon="@drawable/ic_exit"
        android:showAsAction="never"/>
</menu>

Menu 標簽中 Item 標簽的主要屬性包括:

屬性名 定義
android:orderInCategory 表示每個 item 的優先級,值越大優先級越低, actionbar 地方不夠就會放到 overflow 中
android:title item 的標題
android:icon item 顯示的圖標
android:showAsAction item 顯示的方式

其中 showAsAction 屬性接包含以下一些定義:

屬性 說明
ifRoom 會顯示在 Item 中,但是如果已經有 4 個或者 4 個以上的 Item 時會隱藏在溢出列表中。當然個數并不僅僅局限于 4 個,依據屏幕的寬窄而定
never 永遠不會顯示。只會在溢出列表中顯示,而且只顯示標題,所以在定義 item 的時候,最好把標題都帶上
always 無論是否溢出,總會顯示
withText withText 值示意 Action bar 要顯示文本標題。 Action bar 會盡可能的顯示這個標題,但是,如果圖標有效并且受到 Action bar 空間的限制,文本標題有可能顯示不全
collapseActionView 聲明了這個操作視窗應該被折疊到一個按鈕中,當用戶選擇這個按鈕時,這個操作視窗展開。否則,這個操作視窗在默認的情況下是不可見的。一般要配合 ifRoom 一起使用才會有效果

定義好menu配置文件后,在代碼中加載menu。

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_set, menu);
        return true;
    }

而通過重寫onOptionsItemSelected,即可對相應菜單的select事件進行處理。
在一些有物理菜單按鈕的機器上,默認情況下overflow按鈕可能會出現顯示不出來的情況,通過onCreate中調用以下函數即可顯示出來。

/**
 * 即使有物理菜單鍵也顯示ActionBar的flowMenu
 */
public static void showOverflowMenu(Context context) {
    try {
        ViewConfiguration config = ViewConfiguration.get(context);
        //使用java反射技術,獲取getDeclaredField類的私有屬性sHasPermanentMenuKey
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null){
            menuKeyField.setAccessible(true); //將屬性設為可訪問的
            menuKeyField.setBoolean(config, false);  //為屬性賦值為false
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3 . Actionbar樣式自定義

ActionBar默認的樣式是很丑陋的,所以下面簡單的介紹一下如何進行自定義ActionBar的樣式。

<style name="AppThemeBase" parent="android:Theme.Holo">
    <item name="android:actionOverflowButtonStyle">@style/actionbar_overflow</item>//overflow按鈕樣式,即最右邊點擊彈出隱藏菜單項的按鈕
    <item name="android:actionBarStyle">@style/actionbar_style</item>//actionbar樣式
    <item name="android:homeAsUpIndicator">@drawable/icon_back</item>//設置上一級按鈕圖標資源
    <item name="android:windowActionBarOverlay">true</item>//設置actionbar懸浮顯示
</style>
<style name="actionbar_overflow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_overflow</item>//設置overflow按鈕圖標
</style>
<style name="actionbar_style" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@color/backgnd</item>//設置actionbar背景顏色,可以設置為半透明的顏色
    <item name="android:titleTextStyle">@style/actionbar_title_text</item>//設置標題文字樣式
</style>
<style name="actionbar_title_text" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textSize">18dp</item>//設置文字大小
</style>

同過上面的例子,我們就可以舉一反三的定義自己想要的樣式。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容