がぶちゃんの日記

札幌からフルリモートCTO

Android 2.xでAction Barが使えるActionBarSherlockの使い方

はじめに

Android Designというページが公開され、ようやくAndroidのデザインガイドラインもまともになりつつあるわけですが、中でもAction Bar | Android Developersは、アプリのUIの中でも最も重要になるデザインパターンではないでしょうか。しかし、このAction Barに関するAPIは、Android 3.0 (API level 11)からしか利用できません。

Androidには、新しいAPIを過去のバージョンでも利用できるようにするためのSupport Packageというライブラリが存在するのですが、残念ながらなぜかAction Barに関するAPIは含まれておらずSupport PackageでAction Barを実装することができません。

ActionBarSherlockとは

ActionBarSherlockは、この問題を解決するために、Support Packageを拡張してAndroidの各バージョンの互換性を保ちながらAction Barを実装できるライブラリです。(Action Bar以外にもいろいろできそうなのですがまだ見きれていないので今日はAction Barについてだけ。)

ダウンロード

http://beta.abs.io/ からダウンロードできます。今日時点ではRC1が最新ですが、3/7に正式リリースされるようです。

ライブラリプロジェクト

ActionBarSherlockは、EclipseAndroidライブラリプロジェクトとして利用します。また、Build TargetがAndroid 4.0(API Level 14)になっているのでインストールしていない場合は、インストールしてください。
.zipをダウンロードして解凍したら、EclipseAndroidプロジェクトを作ります。
「Project Name」に適当な名前を入れて、「Create project from existing source」を選んで、解凍したフォルダの中のlibrary/フォルダを選んで、「Next >」をクリックします。

Android 4.0」を選択して「Finish」をクリックします。

project.propertiesでandroid.library=trueになっているので自動的にAndroidライブラリプロジェクトになります。

ActionBarSherlockを使う側のAndroidプロジェクト

「Project Name」に適当な名前を入れて、「Next >」をクリックします。

ActionBarSherlockとの互換性を考えて使う側もAndroid 4.0(API Level 14)にします。「Android 4.0」を選択して「Next >」をクリックします。

「Package Name」を適当に入れて、Activityの名前を別にそのままでもいいんですが個人的に気になるのでMainActivityにして、「Finish」をクリックします。

プロジェクトのPropertiesを開いて、Libraryの「Add」をクリックして、さきほど作成したActionBarSherlockのAndroidライブラリプロジェクトを選択します。参照パスが気になる場合は、ActionBarSherlockを解凍したフォルダのlibrary/フォルダを適当な場所に移動してフォルダ名をリネームするなりしてください。
追加できたら「OK」をクリックします。


Activityで

MainActivity.javaを開いて、Activityを継承する代わりにSherlockActivityを継承します。ライブラリの設定が正しくできていればCommand+Shift+Oで自動インポートできるはずです。

もう1点、ActionBarSherlockを使う場合は決められたテーマを使う必要があります。(デザインをさらにカスタマイズしたい場合はテーマを継承してスタイルを上書きすることもできると思います。)

また、setTheme()メソッドでテーマをセットするのですが、このメソッドはsetContentView()メソッドよりも先に呼び出す必要があります。

ということで編集後のコードは以下のようになります。

package com.example.helloactionbar;

import android.os.Bundle;

import com.actionbarsherlock.app.SherlockActivity;

public class MainActivity extends SherlockActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

なお、テーマは以下の3つから選ぶことができます。(他にもNoActionBarなどもありますが必要に応じて選択してください。)

Theme_Sherlock

Theme_Sherlock_Light

Theme_Sherlock_Light_DarkActionBar


Android 2.xでもインストールできるように

このままではAndroid 4.0にしかインストールできません。Android 2.xでもインストールできるようにAndroidManifest.xmlでminSdkVersionを指定します。

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14"/>

これでAndroid 2.1以上でインストールできます。もちろん2.3以上で縛ってもいいと思います。

ということでAndroid 2.1のエミュレータでもAction Barが表示できましたよっと!


このあとは

ダウンロードした.zipを解凍したフォルダのsamples/demos/にデモアプリがあるのでこれを見るのが一番確実で速いかと思います。