Actionbar簡介

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

ActionBar是Android 3.0以后Anrdoid系統(tǒng)增加的導(dǎo)航欄功能控件。它標(biāo)識(shí)了用戶當(dāng)前操作界面的位置蝎毡,并提供了額外的用戶動(dòng)作厚柳、界面導(dǎo)航等功能。使用ActionBar的好處是沐兵,它可以給提供一種全局統(tǒng)一的UI界面别垮,使得用戶在使用任何一款軟件時(shí)都懂得該如何操作,并且ActionBar還可以自動(dòng)適應(yīng)各種不同大小的屏幕扎谎。由于ActionBar是在3.0以后的版本中加入的碳想,如果想在2.x的版本里使用ActionBar的話則需要引入Support Library。

1 . 系統(tǒng)默認(rèn)Actionbar用法簡介

首先介紹在Android 3.0以上的系統(tǒng)中使用系統(tǒng)默認(rèn)的Actionbar的使用方法毁靶。在3.0以上的系統(tǒng)中胧奔,通過直接集成最基礎(chǔ)的Activity即可使用Actionbar。

在onCreate中設(shè)置Actionbar

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

在子界面中我們可以配置返回上一級(jí)的操作预吆,此時(shí)actionbar中會(huì)多出一個(gè)返回箭頭龙填。onCreate中可以做如下的操作:

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

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

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

2 . **為Actionbar添加菜單項(xiàng) **

首先需要在res/menu/下新建一個(gè)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="設(shè)置"
        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 標(biāo)簽中 Item 標(biāo)簽的主要屬性包括:

屬性名 定義
android:orderInCategory 表示每個(gè) item 的優(yōu)先級(jí)拐叉,值越大優(yōu)先級(jí)越低岩遗, actionbar 地方不夠就會(huì)放到 overflow 中
android:title item 的標(biāo)題
android:icon item 顯示的圖標(biāo)
android:showAsAction item 顯示的方式

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

屬性 說明
ifRoom 會(huì)顯示在 Item 中,但是如果已經(jīng)有 4 個(gè)或者 4 個(gè)以上的 Item 時(shí)會(huì)隱藏在溢出列表中巷嚣。當(dāng)然個(gè)數(shù)并不僅僅局限于 4 個(gè)喘先,依據(jù)屏幕的寬窄而定
never 永遠(yuǎn)不會(huì)顯示。只會(huì)在溢出列表中顯示廷粒,而且只顯示標(biāo)題窘拯,所以在定義 item 的時(shí)候红且,最好把標(biāo)題都帶上
always 無論是否溢出,總會(huì)顯示
withText withText 值示意 Action bar 要顯示文本標(biāo)題涤姊。 Action bar 會(huì)盡可能的顯示這個(gè)標(biāo)題暇番,但是,如果圖標(biāo)有效并且受到 Action bar 空間的限制思喊,文本標(biāo)題有可能顯示不全
collapseActionView 聲明了這個(gè)操作視窗應(yīng)該被折疊到一個(gè)按鈕中壁酬,當(dāng)用戶選擇這個(gè)按鈕時(shí),這個(gè)操作視窗展開恨课。否則舆乔,這個(gè)操作視窗在默認(rèn)的情況下是不可見的。一般要配合 ifRoom 一起使用才會(huì)有效果

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

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

而通過重寫onOptionsItemSelected,即可對(duì)相應(yīng)菜單的select事件進(jìn)行處理纲辽。
在一些有物理菜單按鈕的機(jī)器上颜武,默認(rèn)情況下overflow按鈕可能會(huì)出現(xiàn)顯示不出來的情況,通過onCreate中調(diào)用以下函數(shù)即可顯示出來拖吼。

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

3 . Actionbar樣式自定義

ActionBar默認(rèn)的樣式是很丑陋的,所以下面簡單的介紹一下如何進(jìn)行自定義ActionBar的樣式吊档。

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拒名,隨后出現(xiàn)的幾起案子吩愧,更是在濱河造成了極大的恐慌,老刑警劉巖增显,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雁佳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡同云,警方通過查閱死者的電腦和手機(jī)糖权,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炸站,“玉大人星澳,你說我怎么就攤上這事『狄祝” “怎么了禁偎?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵腿堤,是天一觀的道長。 經(jīng)常有香客問我如暖,道長笆檀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任盒至,我火速辦了婚禮酗洒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枷遂。我一直安慰自己樱衷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布登淘。 她就那樣靜靜地躺著箫老,像睡著了一般封字。 火紅的嫁衣襯著肌膚如雪黔州。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天阔籽,我揣著相機(jī)與錄音流妻,去河邊找鬼。 笑死笆制,一個(gè)胖子當(dāng)著我的面吹牛绅这,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播在辆,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼证薇,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了匆篓?” 一聲冷哼從身側(cè)響起浑度,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸦概,沒想到半個(gè)月后箩张,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窗市,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年先慷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咨察。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡论熙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摄狱,到底是詐尸還是另有隱情脓诡,我是刑警寧澤素跺,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站誉券,受9級(jí)特大地震影響指厌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踊跟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一踩验、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧商玫,春花似錦箕憾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炬藤,卻和暖如春御铃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沈矿。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工上真, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羹膳。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓睡互,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陵像。 傳聞我的和親對(duì)象是個(gè)殘疾皇子就珠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容