Android控件ActionBar浅析及适配2.x的方法介绍
概述:
? 在Honeycomb版本系統(tǒng)中,Android引入了全新的操作欄。操作欄不僅取代了顯示標題和應用圖標的傳統(tǒng)標題欄(title bar),還帶來了更多其他的功能,例如,安置菜單選項、配置應用圖標作為導航按鈕,等等。——《Android編程權威指南》
優(yōu)點:
1.使用方便,避免開發(fā)者重復制造輪子。
2.框架成熟,不需要開發(fā)者再去做多余的適配不同分辨率及碎片化優(yōu)化操作。
正常使用(API14及以上):
代碼及思路分析:
正常情況下的我們是通過Java代碼和xml代碼組合來編寫actionbar。
xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/action_compose"android:icon="@drawable/delete_button_normal"android:showAsAction="always"android:title="@string/action_compose"/><itemandroid:id="@+id/action_delete"android:icon="@drawable/delete_button_normal"android:showAsAction="always"android:title="@string/action_delete"/><itemandroid: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: ? ? 這個值使菜單項永遠都不出現(xiàn)在Action Bar上
withText: ?這個值使菜單項和它的圖標,菜單文本一起顯示
看到上面的標簽為menu,就應該知道了,到上面在java代碼中是通過菜單來實現(xiàn)了。主要的方法是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標簽中去設置,如下:
<activityandroid: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>
實現(xiàn)效果展示:
注:有時候我們在屏幕足夠大的時候還是會在最左側出現(xiàn)一個小箭頭,那么如何除掉Actionbar最左側的箭頭呢?可以點擊這里查看解決方法。
適配2.x版本:
代碼及思路分析:
? 對于上面的邏輯方法只是可以在API 14及以上的系統(tǒng)上實現(xiàn)。那么API 14以下的系統(tǒng)要怎么去實現(xiàn)同樣的效果呢?在官方出臺新的解決方案之前,就有一些大神開始研究且開發(fā)出了一套框架——ActionBarSherlock。當然目前Google已經(jīng)就這個問題提供了一個新的解決方案——android-support-v7-appcompat。我們可以讓我們的Activity繼承自ActionBarActivity,不過不擔心這個ActionBarActivity會對代碼有沒有什么不良的影響,因為它是繼承自FragmentActivity。
? 那么要怎么實現(xiàn)呢?我們需要引入一個工具包:android-support-v7-appcompat,并在Android的項目中導入它。是不是到這里就已經(jīng)大功告成了呢?運行程序后,我們發(fā)現(xiàn)并非如此。可是,在基有的代碼上我們沒有發(fā)現(xiàn)任何蛛絲馬跡,那我們要怎么去修改這個Bug呢?google吧,孩子。
? 后來我們發(fā)現(xiàn)我們不能再使用靜態(tài)的xml代碼來創(chuàng)建它了。我們只能動態(tài)的在Java代碼中通過Java代碼動態(tài)生成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靜態(tài)地創(chuàng)建,事實證明是失敗的,需要動態(tài)來創(chuàng)建。
運行效果圖展示:
本人文筆拙劣,可能會有一些表述不夠清晰。更詳細的代碼和細節(jié)請在下面的源碼連接中去下載查看。還有一點需要注意,如果你的測試機是魅族系列,可能有些地方不能很好適配,請更換測試機重新測試或將屬性參數(shù)改為SHOW_AS_ACTION_ALWAYS(我用的也是魅族)。
源碼下載:
http://download.csdn.net/detail/u013761665/8737119
總結
以上是生活随笔為你收集整理的Android控件ActionBar浅析及适配2.x的方法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java设计模式——装饰者模式
- 下一篇: Android涂鸦技术及刮刮乐示例分析