ActionBarSherlock應該算得上是GitHub上最火的Android開源項目了,它是一個獨立的庫,通過一個API和主題,開發者就可以很方便地使用所有版本的Android動作欄的設計模式。
對於Android 4.0及更高版本,ActionBarSherlock可以自動使用本地ActionBar實現,而對於之前沒有ActionBar功能的版本,基於Ice Cream Sandwich的自定義動作欄實現將自動圍繞布局。能夠讓開發者輕松開發一款帶動作欄(Action bar)的應用,並且適用於Android 2.x及其以上所有版本。
那既然項目很好很強大的話,怎么使用他了?
首先,出github上下載這個項目。相應的項目的地址是https://github.com/JakeWharton/ActionBarSherlock,他的官網是http://actionbarsherlock.com/,下載即可,現在的最新的版本是4.4.0.
下載好,就解壓出來,有三個文件夾,其實library就是Android公共庫的使用,也就是將一些共同的東西抽取出來,包括java文件,資源文件等。
接着新建一個Android工程,然后右鍵選擇properties,再選擇Android,接着添加library進來,如下圖所示:
1.修改項目的AndroidManifest.xml文件,將Android的Theme,也就主題改為如下:
android:theme=”@style/Theme.Sherlock.Light” ,也就是使用ActionBarSherlock里的主題;
2.修改MainActivity.java文件,默認生成的MainActivity類是繼承Activity的,現在將Activity修改成SherlockActivity;
3.修改menu文件夾下的main_menu.xml文件如下:
<!-- actionbarsherlock 菜單 --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <!-- custom 客戶項目 --> <item android:id="@+id/menu_search" android:showAsAction="ifRoom" android:title="@string/action_label_search" android:actionViewClass="android.widget.SearchView" /> <!-- icon 圖標項目 --> <item android:id="@+id/menu_refresh" android:showAsAction="ifRoom" android:title="@string/action_label_refresh" android:icon="@drawable/ic_menu_refresh_holo_light" /> <!-- icon + text 圖標 文本--> <item android:id="@+id/menu_both" android:showAsAction="ifRoom|withText" android:title="@string/action_label_both" android:icon="@drawable/ic_menu_star_holo_light" /> <!-- text 文本內容--> <item android:id="@+id/menu_text" android:showAsAction="ifRoom" android:title="@string/action_label_text" /> <item android:id="@+id/menu_logo" android:showAsAction="ifRoom" android:checkable="true" android:checked="false" android:title="@string/action_label_logo" /> <item android:id="@+id/menu_up" android:showAsAction="ifRoom" android:checkable="true" android:checked="false" android:title="@string/action_label_up" /> <!-- Navigation submenu 導航的子菜單 --> <item android:id="@+id/menu_nav" android:title="@string/action_label_nav"> <menu> <group android:id="@+id/menu_nav_group" android:checkableBehavior="single"> <item android:id="@+id/menu_nav_tabs" android:title="@string/action_label_nav_tabs" android:checked="true" /> <item android:id="@+id/menu_nav_drop_down" android:title="@string/action_label_nav_drop_down" /> <item android:id="@+id/menu_nav_label" android:title="@string/action_label_nav_label" /> </group> </menu> </item> <!-- action bar background submenu 背景子菜單層級關系--> <item android:id="@+id/menu_bak" android:title="@string/action_label_bak"> <menu> <group android:id="@+id/menu_bak_group" android:checkableBehavior="single"> <item android:id="@+id/menu_bak_none" android:title="@string/action_label_bak_none" android:checked="true" /> <item android:id="@+id/menu_bak_gradient" android:title="@string/action_label_bak_gradient" /> <!--<item android:id="@+id/menu_bak_9_patch" android:title="@string/action_label_image" />--> </group> </menu> </item> </menu>
要使ActionBar顯示menu按鈕,得重寫MainActivity中的onCreateOptionsMenu方法,相應源代碼如下:
getSupportMenuInflater().inflate(R.menu.main_menu, menu); // set up a listener for the refresh item final MenuItem refresh = (MenuItem) menu.findItem(R.id.menu_refresh); refresh.setOnMenuItemClickListener(new OnMenuItemClickListener() { // on selecting show progress spinner for 1s public boolean onMenuItemClick(MenuItem item) { // item.setActionView(R.layout.progress_action); handler.postDelayed(new Runnable() { public void run() { refresh.setActionView(null); } }, 1000); return false; } }); return super.onCreateOptionsMenu(menu);
通過觀察,我們可以清晰的觀察出來,通過某個menuItem 點擊后,重新加載相應的視圖。
其運行的效果如下:
這就是Actionbarsherlock 簡明教程,懇請大家斧正。