Android控制項ActionBar淺析及適配2.x的方法介紹

來源:互聯網
上載者:User

標籤:android   actionbar   適配2.x   

概述:

  在Honeycomb版本系統中,Android引入了全新的操作欄。操作欄不僅取代了顯示標題和應用表徵圖的傳統標題列(title bar),還帶來了更多其他的功能,例如,安置菜單選項、配置應用表徵圖作為導覽按鈕,等等。——《Android編程權威指南》


優點:

1.使用方便,避免開發人員重複製造輪子。

2.架構成熟,不需要開發人員再去做多餘的適配不同解析度及片段化最佳化操作。


正常使用(API14及以上):代碼及思路分析:

正常情況下的我們是通過Java代碼和xml程式碼群組合來編寫actionbar。

xml檔案如下:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/action_compose"        android:icon="@drawable/delete_button_normal"        android:showAsAction="always"        android:title="@string/action_compose"/>        <item        android:id="@+id/action_delete"        android:icon="@drawable/delete_button_normal"        android:showAsAction="always"        android:title="@string/action_delete"/>        <item        android:id="@+id/action_settings"        android:icon="@drawable/delete_button_normal"        android:showAsAction="always"        android:title="@string/action_settings"/></menu>
定義3個item,設定其showAsAction屬性為always.

關於showAsAction屬性的值有以下幾個:

always:    這個值會使功能表項目一直顯示在Action Bar上
ifRoom:    如果有足夠的空間,這個值會使功能表項目顯示在Action Bar上
never:     這個值使功能表項目永遠都不出現在Action Bar上
withText:  這個值使功能表項目和它的表徵圖,菜單文本一起顯示

看到上面的標籤為menu,就應該知道了,到上面在java代碼中是通過菜單來實現了。主要的方法是onCreateOptionsMenu,如下:

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

為了去響應左邊的返回鍵(箭頭)和Home需要我們在代碼做以下邏輯:

ActionBar bar = getActionBar();bar.setHomeButtonEnabled(true);bar.setDisplayHomeAsUpEnabled(false);bar.setDisplayShowHomeEnabled(true);

還有一點就是Home的表徵圖,我們可以在manifest的activity標籤中去設定,如下:

<activity            android:name="com.actionbar.activity.MainActivity"            android:label="@string/action_bar_title"            android:logo="@drawable/back_button_normal" >                        <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>


實現效果展示:



註:有時候我們在螢幕足夠大的時候還是會在最左側出現一個小箭頭,那麼如何除掉Actionbar最左側的箭頭呢?可以點擊這裡查看解決方案。


適配2.x版本:代碼及思路分析:

  對於上面的邏輯方法只是可以在API 14及以上的系統上實現。那麼API 14以下的系統要怎麼去實現同樣的效果呢?在官方出台新的解決方案之前,就有一些大神開始研究且開發出了一套架構——ActionBarSherlock。當然目前Google已經就這個問題提供了一個新的解決方案——android-support-v7-appcompat。我們可以讓我們的Activity繼承自ActionBarActivity,不過不擔心這個ActionBarActivity會對代碼有沒有什麼不良的影響,因為它是繼承自FragmentActivity。


  那麼要怎麼實現呢?我們需要引入一個工具包:android-support-v7-appcompat,並在Android的項目中匯入它。是不是到這裡就已經大功告成了呢?運行程式後,我們發現並非如此。可是,在基有的代碼上我們沒有發現任何蛛絲馬跡,那我們要怎麼去修改這個Bug呢?google吧,孩子。


  後來我們發現我們不能再使用靜態xml代碼來建立它了。我們只能動態在Java代碼中通過Java代碼動態產生Item,如下:

public boolean onCreateOptionsMenu(Menu menu) {//MenuInflater inflater = getMenuInflater();//inflater.inflate(R.menu.menu, menu);//return super.onCreateOptionsMenu(menu);MenuCompat.setShowAsAction(menu.add("First").setIcon(android.R.drawable.btn_star), MenuItemCompat.SHOW_AS_ACTION_ALWAYS);MenuCompat.setShowAsAction(menu.add("Second").setIcon(android.R.drawable.ic_menu_rotate), MenuItemCompat.SHOW_AS_ACTION_ALWAYS);return true;}
注釋掉的部分就是通過xml靜態地建立,事實證明是失敗的,需要動態來建立。

運行展示:



本人文筆拙劣,可能會有一些表述不夠清晰。更詳細的代碼和細節請在下面的源碼串連中去下載查看。還有一點需要注意,如果你的測試機是魅族系列,可能有些地方不能很好適配,請更換測試機重新測試或將屬性參數改為SHOW_AS_ACTION_ALWAYS(我用的也是魅族)。


源碼下載:

http://download.csdn.net/detail/u013761665/8737119

Android控制項ActionBar淺析及適配2.x的方法介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.