首頁(yè)技術(shù)文章正文

Android+物聯(lián)網(wǎng)培訓(xùn)之使用ActionBar搭建Android UI框架

更新時(shí)間:2017-07-02 來源:黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn) 瀏覽量:

使用ActionBar搭建Android UI框架

什么是ActionBar?

ActionBar最早起源于Android 3.0系統(tǒng), 最初是基于平板電腦設(shè)計(jì)的頂欄操作模塊, 后來Android 4.0系統(tǒng)將此操作模塊推廣的普通的手機(jī)屏幕, 旨在為所有Android用戶提供統(tǒng)一的交互體驗(yàn)。
 
ActionBar主要分如下幾個(gè)部分:
 
1. 標(biāo)題區(qū)域
此區(qū)域位于頂欄左側(cè), 用來展示程序圖標(biāo), 標(biāo)題, 及返回按鍵。
 
2. 操作區(qū)域
此區(qū)域位于頂欄右側(cè), 用來展示操作選項(xiàng)及菜單列表。
 

 
            
 

什么是ActionBarSherlock?

由于ActionBar 起源于Android 3.0系統(tǒng), 所以Android 2.x的系統(tǒng)無法正常運(yùn)行ActionBar的所有功能。 我們可以使用第三方框架ActionBarSherlock來解決這個(gè)問題。使用這種框架的好處就是, Android任何版本都可以統(tǒng)一ActionBar的標(biāo)準(zhǔn)樣式, 無需開發(fā)者做過多兼容。這是官方網(wǎng)址:http://actionbarsherlock.com。
 
 
 
 
 
 
 
 
 

案例分析

接下來, 我們通過一個(gè)簡(jiǎn)單的案例,來了解一下ActionBarSherlock的使用方式。

一. 下載ActionBarSherlock官方SDK

登錄官方網(wǎng)址:http://actionbarsherlock.com 下載SDK并解壓, 如圖所示:
 

                               
 
其中,actionbarsherlock是我們要使用的第三方庫(kù)文件,actionbarsherlock-samples是例子程序。
 

二. 創(chuàng)建Demo程序

使用eclipse創(chuàng)建Android項(xiàng)目MyActionBarDemo,并且引入上一步下載的第三方庫(kù)文件actionbarsherlock, 
 

圖1-3 MyActionBarDemo
 
右鍵單擊項(xiàng)目MyActionBarDemo,選擇Properties,彈窗左側(cè)列表選擇Android,點(diǎn)擊Add按鈕,選擇actionbarsherlock后,點(diǎn)擊確定。這樣,我們自己的項(xiàng)目MyActionBarDemo就和ActionBarSherlock關(guān)聯(lián)了起來,可以直接調(diào)用ActionBarSherlock中的所有資源文件和API了。
 


注:由于actionbarsherlock的libs包下已經(jīng)有android-support-v4.jar,為了避免jar包沖突,我們需要將MyActionBarDemo中l(wèi)ibs目錄下的android-support-v4.jar刪除掉。
 

三. 快速開始

1. 在AndroidManifest.xml中,修改應(yīng)用程序的主題,改為Sherlock下的某種主題,比如:@style/Theme.Sherlock.Light,表示亮色風(fēng)格的主題。
 
 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock.Light" >
        <activity
            android:name="com.example.actionbardemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 </application>
 
2. 讓MainActivity繼承SherlockActivity。
 
public class MainActivity extends SherlockActivity {
         @Override
         protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);
         }
}
 
3. 在res目錄下,新建menu文件夾,在menu下新建xml文件,名為main.xml,文件內(nèi)容如下所示:
 
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_1"
        android:showAsAction="always"
       android:icon="@drawable/ic_launcher"
        android:title="action_1"/>
</menu>
 
此xml文件根標(biāo)簽是menu,子標(biāo)簽item表示一個(gè)操作選項(xiàng)。item有幾個(gè)屬性:id表示item的id標(biāo)識(shí);showAsAction表示item的展現(xiàn)方式,showAsAction=always表示item一直展示在actionbar的條目上;icon表示item的圖標(biāo);title表示item的標(biāo)題。
 
4. 在MainActivity中重寫onCreateOptionsMenu這個(gè)方法。
 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
         getSupportMenuInflater().inflate(R.menu.main, menu);
         return super.onCreateOptionsMenu(menu);
}
 
此方法可以將描述文件main.xml填充到ActionBar的條目中。
運(yùn)行程序,即可發(fā)現(xiàn)在ActionBar的操作區(qū)域,多了一個(gè)操作選項(xiàng),如圖所示:
 
 
 
 


 
 
5. 為了讓操作選項(xiàng)響應(yīng)點(diǎn)擊事件,可以在MainActivity中重寫onOptionsItemSelected方法。
 
@Override
public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
         case R.id.action_1:
              Log.d("Test", "action 1 is clicked!");
              break;
         default:
         break;
         }
         return super.onOptionsItemSelected(item);
}
 
在這個(gè)方法中,根據(jù)item的id來區(qū)分哪一個(gè)item被點(diǎn)擊,從而執(zhí)行相應(yīng)的操作。
 
 
 
 
 

四. 擴(kuò)展功能

1. 為了在ActionBar中顯示子菜單功能,可以在main.xml中追加一段代碼:
 
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_1"
        android:icon="@drawable/ic_launcher"
        android:showAsAction="always"
        android:title="action_1"/>
    <item
        android:id="@+id/action_more"
        android:icon="@drawable/ic_launcher"
        android:showAsAction="always"
        android:title="action_more">
        <menu>
            <item
                android:id="@+id/action_2"
                android:showAsAction="always"
                android:title="action_2"/>
            <item
                android:id="@+id/action_3"
                android:showAsAction="always"
                android:title="action_3"/>
        </menu>
    </item>
</menu>
 
運(yùn)行項(xiàng)目,點(diǎn)擊新增的item,
 
 
 
 

 
 
2. ActionBar還可以動(dòng)態(tài)修改標(biāo)題,logo圖標(biāo),設(shè)置返回按鈕等。
 
private void updateActionBar() {
         ActionBar actionbar = getSupportActionBar();//獲取actionbar對(duì)象
         actionbar.setTitle("自定義標(biāo)題");//修改actionbar標(biāo)題
         actionbar.setLogo(R.drawable.logo);//修改actionbar的logo
         actionbar.setDisplayHomeAsUpEnabled(true);//顯示返回按鍵
}
 


 
注: 返回按鍵的點(diǎn)擊事件也是在onOptionsItemSelected中進(jìn)行捕獲,只不過采用系統(tǒng)默認(rèn)id:android.R.id.home。
 

總結(jié)

隨著Android系統(tǒng)的飛速發(fā)展,ActionBar會(huì)應(yīng)用到越來越多的項(xiàng)目當(dāng)中,比如微信近期的幾個(gè)版本都采用了ActionBar的UI框架。為了保證2.x版本的兼容,我們可以直接使用ActionBarSherlock這個(gè)流行的第三方SDK,其API的調(diào)用方式幾乎和Android原生ActionBar的調(diào)用方式完全一致,極大降低了開發(fā)成本,提高了開發(fā)效率。


本文版權(quán)歸黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院
首發(fā):http://android.itheima.com

 
分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!