2013年10月2日水曜日

support-v7-appcompatを使ってAndroid2系でActionBarを動かす

API level 18 から support-v7-appcompat を使って
古いOSでも ActionBar が使えるようになったと聞いたので、
さっそくやってみたら、エラー、エラー、エラー。
かなり苦労したので、記録に残します。

jar ファイルだけ libs に入れて関連付けてやればいいのかと思ったら、そうでもなかった。
jar ファイルだけだとリソースがないので、プロジェクトで追加しないとダメらしい。


※SDKはアップデートしておきます
※SDKマネージャーもアップデートが必要な場合、
 ライブラリの紐付け方とかいろいろ変わるので、
 既存のプロジェクトがある場合はいろいろ時間と覚悟が必要です


手順

http://developer.android.com/tools/support-library/setup.html#libs-with-res
↑のサイトを参考に support-v7-appcompat プロジェクトを作る。
Eclipseの場合を要約すると、

  1. SDK Manager を使って Android Support library をダウンロードする
  2. 新しいプロジェクトとして support-v7-appcompa をインポートする
    1. File -> Import を選択
    2. Existing Android Code Into Workspace を選択
    3. <sdk>/extras/android/support/v7/appcompat/ を選択
    4. Finish を押してインポートする ←わたしは念のためワークスペースにコピーしました。
    5. 作成した support-v7-appcompa プロジェクトの libs 内の android-support-v4.jar と android-support-v7-appcompat.jar を右クリックし、Build Path -> Add to Build Path を選択 ←このメニューが出てこない場合は追加済みなのでやらなくてよさそう
    6. プロジェクトを右クリックし、Build Path -> Configure Build Path を選択
    7. Order and Export タブで、今追加した v4 と v7 にチェックを入れる
    8. Android Dependencies のチェックは外す
    9. OKを押して、完了!
次に、自分で作りたいアプリのプロジェクトに v7 を設定する。

  1. 自分のアプリのプロジェクトを右クリックし、Properties を選択
  2. Android -> Library の Add をクリック
  3. さっき作った support-v7-appcompat を選択し、OKを押す
  4. 設定画面をOKで閉じる
と、ドキュメントに書いてある手順はここまで。
このあとビルドしたら、エラーになりました。

Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

どうやら、AndroidManifest に書いてあるテーマの変更が必要なようです。

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat" >
        <activity
             ・・・>
        </activity>
</application>

もう1つ、v4 がかぶってるよ的なエラーがでたので、自分のアプリのプロジェクトから
android-support-v4.jar を削除した。

これでビルドしてみたら、うまくいった!!!