ActionBarSherlockライブラリを使って、2.xでもActionBarを使用する


Android3.0からタブレット向けに追加されたActionBarは、Android4.0でスマートフォン向けに拡張され、グーグルのAndroidアプリケーションのデザインガイドであるAndroid Designとしても重要視されているユーザインターフェースです。
本エントリでは、ActionBarSherlockライブラリ用いて、Android2.x(HoneyComb以前)でもAndroid3.x/Android4.0.xと同様にActionBarを利用する方法を紹介します。

TechBoosterでは様々なActionBarの記事を取り扱っています。
以下内容の記事も参考にどうぞ。
Android4.0からのActionBar再入門
ActionBarにMENUを表示する
ActionBarのタブを利用する
ActionBarに共有履歴を表示する
ActionProviderを使用してMenuItemの処理を共通化する

それでは続きをどうぞ

ライブラリプロジェクトの利用方法

ActionBarSherlockライブラリを利用するためには、
まずライブラリプロジェクトをダウンロードし、利用するプロジェクトから参照する必要があります。

※ActionBarSherlockライブラリのプロジェクトから参照する方法は、以下リンク先に非常に丁寧にまとまっています
ので、そちらを参照ください。
Android 2.xでAction Barが使えるActionBarSherlockの使い方(gabuchan日記さま)

ライブラリプロジェクトの設定と、使用するプロジェクトからの参照を終えたら
いよいよActionBarSherlockライブラリが利用できます。
ActionBarを利用する為には、以下の二点に注意を払う必要が有ります。

       ・SherlockActivityを継承する
       ・テーマを設定する為、setThemeメソッドをsetContentViewより前に呼び出す

以上2点を踏まえて、ActionBarSherlockライブラリを利用するサンプルコードは以下になります。

■src/ActionBarSampleActivity.java

public class ActionBarSampleActivity extends SherlockActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /* Themeの設定が必ず必要 */
        setTheme(R.style.Theme_Sherlock);
        setContentView(R.layout.main);
	}
}

1行目で、SherlockActivityを継承、8行目でテーマを設定しています。
テーマを設定しない場合、アプリケーション起動時にエラー終了していしまうため、注意しましょう。
8行目で設定しているテーマはActionBarSherlockライブラリで用意されているテーマになります。
ActionBarSherlockライブラリには3種類のテーマが用意されており、本サンプルでは用意されたテーマの内のオーソドックスなICSのHoloテーマに近い物を使用しています。

ActionItemを利用する

ActionBarSherlockライブラリでActionItemを利用する方法は、
Android3.x以降でActionItemを利用する方法とほぼ同じです。

onCreateOptionsMenuメソッドをオーバーライドして実装し、
メソッド内でcom.actionbarsherlock.view.Menuクラスのインスタンスに対し
アイテムをaddしていきます。

注意しなければならないのは、Android2.x系ではMenuボタン(ハードウェアキー)があるということです。
Menuボタンがある場合、表示仕切れないActionItemについては、Menuボタン押下時に表示されます。

以下スクリーンショット一枚目は、ActionItemが追加されている様子を表しています。
add/Save/Delete/Searchの4つのActionItemを追加していますが、Deleteが表示されていません。
スクリーンショット二枚目は、隠れてしまったActionItem(Delete)をMenuボタンを押下して出力させたところです。

 

以下サンプルコードは、add/Save/Delete/SearchというActionItemを追加している
ソースコードです。
■src/ActionBarSampleActivity.java

    @Override
	public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    	menu.add("add")
    		.setIcon(android.R.drawable.ic_menu_add)
    		.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    	menu.add("Search")
    		.setIcon(android.R.drawable.ic_menu_search)
    		.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    	menu.add("Save")
    		.setIcon(android.R.drawable.ic_menu_save)
    		.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    	menu.add("Delete")
		.setIcon(android.R.drawable.ic_menu_delete)
		.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    	return true;
	}

3行目〜5行目でActionItemを追加しています。
4行目はActionItemに表示されるアイコンの設定を、5行目はActionItemの表示方式を設定しています。

詳しくは、Android4.0からのActionBar再入門を参考下さい。

SplitActionBarの利用

ActionBarSherlockライブラリでは、Android2.x環境でもSplitActionBarを利用することができます。
SplitActionBarとは、スマートフォン端末等で利用出来るActionBarの表示モードで、ONにすると、画面横方向のサイズが小さい場合に(w480dp以下)ActionItemが画面下部に表示されるようになります。
SplitActionBarを使いたいActivityに対し、AndroidManifest内のActivityタグにsplitActionBarWhenNarrowを指定します。
これもAndroid4.0で利用するときと同じように利用することができます。

       <activity
            android:label="@string/app_name"
            android:name="org.jpn.techbooster.sample.splitactionbarsample.ActionBarSampleActivity"
            android:uiOptions="splitActionBarWhenNarrow">

以下のスクリーンショットは、縦横を切り替えたときの表示の違いを見た図です。
縦画面のときは、SplitActionBarを表示、横画面のときは、SplitActionBarは表示しないところを
示した図です。

tabの利用

ActionBarSherlockライブラリでは、Android2.x環境でもタブをActionBarに組み込み利用する事が出来ます。
タブを表示するなどActionbarに対する変更をくわえる場合には、ActionBarクラスのインスタンスを取得する必要がありますが、
ActionBarSherlockライブラリを使った場合、ActionBarクラスのインスタンスの取得方法がgetActionBarメソッドから
getSupportActionBarメソッドに変わっています。
この点は、ActionBarSherlockライブラリを利用する場合に変更しなければならない点なので注意が必要です。

以下のソースコードをご覧下さい。
■ActionBarSampleActivity.java

public class ActionBarSampleActivity extends SherlockActivity implements ActionBar.TabListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /* Themeの設定が必ず必要 */
        setTheme(R.style.Theme_Sherlock);
        setContentView(R.layout.main);

        /* Tabの利用 */
        final ActionBar mActionBar = getSupportActionBar();

        mActionBar.addTab(mActionBar.newTab().setText("tab1").setTabListener(this));
        mActionBar.addTab(mActionBar.newTab().setText("tab2").setTabListener(this));
        mActionBar.addTab(mActionBar.newTab().setText("tab3").setTabListener(this));

        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    }

12行目でActionBarクラスのインスタンスを取得しています。
ActionBarのインスタンスを取得した後の処理は、Android4.0以降で利用される従来通りの処理になっています。

まとめ

ActionBarはAndroidアプリケーションを作成する上で、重要なユーザインターフェースです。
ただし、スマートフォン端末で利用できるのはAndroid4.0以降のみの端末のみであり、
市場に流通しているAndroid端末のうち、大きなウエイトを占めるのはAndroid2.xになります。

ActionBarSherlockライブラリは、Android4.0のAPIと大きな違い無く利用できる為、
Android2.xとAndroid4.0の互換性を保つアプリケーション開発にはかかせないライブラリとなるのではないかと思います。