お使いのブラウザは、バージョンが古すぎます。

このサイトは、Internet Explore8・Internet Explore9には対応しておりません。
恐れ入りますが、お使いのブラウザをバージョンアップしていただきますよう宜しくお願いいたします。

【Android】ActionBarActivityを使ってみる

こんにちわ、pencoです。
今回はAndroid Support Library Rev.18から追加されたActionBarActivityを使って、Android2.1でActionBarを表示できるようにしたいと思います。

ActionBarは Android 3.0から追加されたタイトルバーに代わるウィジェットで、下図の様にメニューボタンなどが配置できます。
actionbar

ではではさっそく やってみます。

インストール

まずはAndroid Support Libraryをインストールします。
(Eclipseでの説明になります。android-sdkまでのパスなどは環境によって異なります。)

Eclipseの Window > Android SDK Manager を起動します。
Extrasの中から Android Support Library にチェックを入れてインストールします。
sdkManager
 

ライブラリのインポート

 
次にライブラリプロジェクトをインポートします。

先程のSupport Libraryのインストールが成功していれば、
C:\Program Files\Android\android-sdk\extras\android\support\v7
の様にフォルダが作成されているはずです。

この中のappcompatをインポートします。
 
Eclipseの File > New > Project > Android > Android Project from Existing Code を選んで次へ。

Root Directory に C:\Program Files\Android\android-sdk\extras\android\support\v7\appcompat を選択します。
この時 Add project to working sets にチェックを入れて下さい。

インポートが完了すると android-support-v7-appcompat プロジェクトが作成されます。
import

プロジェクトの作成

これで半分きました。長いですね。
次に、ActionBarを使用したいプロジェクトを作りましょう。
この時、sdkのバージョンは以下の様に指定して下さい。

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

作成したプロジェクトで右クリック > Properties > Android > library でライブラリーにインポートした android-support-v7-appcompat を追加します。

さらに、jarファイルをコピーします。

C:\Program Files\Android\android-sdk\extras\android\support\v7\appcompat\libs の中に

  • android-support-v4.jar
  • android-support-v7-appcompat.jar

という2つのjarファイルがあるので、これを自分のプロジェクトのlibsフォルダにコピーします。
libs
 

実装

 
やっと実装です。もう少しです。
先にテーマの設定を行います。
ActionBarActivityを使う為にはAppCompat のテーマを設定する必要があります。
使えるテーマは以下の3種類です。

  • Theme.AppCompat
  • Theme.AppCompat.Light
  • Theme.AppCompat.Light.DarkActionBar

 
/res/values/styles.xml のAppBaseTheme を上記3つのうちどれかに設定します。

<!-- <style name="AppBaseTheme" parent="android:Theme.Light"> -->
<style name="AppBaseTheme" parent="Theme.AppCompat">

 
 
最後にActivityを変更します。
継承をActivityからActionBarActivityに変更します。

public class SampleActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // タイトルバーの削除
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
    }
}

これで今までのタイトルバーがActionBarに変更されます。
言わずもがなですが、タイトルバーを非表示にしているとActionBarは表示されませんのでご注意ください。
 
あとはonCreateOptionsMenuをオーバーライドしてメニューの設定を行ったり、通常のタイトルバーの様にタイトルを設定したり出来ます。

public class SampleActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // タイトルバーの削除
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setTitle(R.string.mytitle); 
        setContentView(R.layout.main);
    }
}

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	// メニューの要素を追加
    	MenuItem item = menu.add(0, MENU_HELP, 0, "Help")
    	.setIcon(R.drawable.ic_action_help);
    	MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
    	
    	return true;   	
    }

 
完成図はこんな感じです。
actionbar02

 
以上です!
最後まで閲覧頂きありがとうございます。

2 Comments

  1. amanojaku

    【Android】ActionBarActivityを使ってみる
    http://nvtrlab.jp/blog/penco/actionbaractivity%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B.html

    「android-support-v7-appcompat」プロジェクトに×が表示されますが、問題ないのでしょうか?

    > setTitle(R.string.mytitle);

    “mytitle”がエラーになりますが、どんな設定が必要が必要ですか?

    > MenuItem item = menu.add(0, MENU_HELP, 0, “Help”)
    > .setIcon(R.drawable.ic_action_help);

    “MENU_HELP”がエラーになりますが、どんな設定が必要が必要ですか?

    “ic_action_help”がエラーになりますが、作成するアイコンのサイズとか、フォルダーは”drawable”だけで良いのか、それとも「drawable-hdpi~rawable-xxhdpi」にアイコンを作成するのでしょうか?」

    Reply
    • penco
      penco

      amanojakuさん こんにちは。
      コメントありがとうございます。1つずつ回答させて頂きます。
       
      >「android-support-v7-appcompat」プロジェクトに×が表示されますが、問題ないのでしょうか?
      この記事を書いて以降、Android Support Libraryが更新されましたので、それに伴う修正が必要になります。(記事が古いままで申し訳ないです。)
       
      記事の通り、サポートライブラリをインポートして頂けた状態ならば、
      android-support-v7-appcompat プロジェクトの「res」フォルダを展開してみてください。
      お使いのAndroid Support Libraryのリビジョン(Rev.)が最新のものの場合、
      中に「values-v21」というフォルダがあるはずです。
      この中のthemes_base.xmlの中で、API21でないと使用できないテーマが指定されています。
      そこで、最新のサポートライブラリを使用する為には、プロジェクトのビルド・ターゲットをAndroid 5.0.1(APIレベル21)へと更新する必要が出てきました。
       
      以下の作業を、android-support-v7-appcompat プロジェクトと、サポートライブラリを使用したいプロジェクトの両方に行ってみてください。
       
      —– ビルド・ターゲットを更新する —–
      プロジェクトの「project.properties」というファイルを開くと、「target=android-〇」(〇は数字)と記述されている箇所があると思います。その数字の部分を「21」に書き換え保存して下さい。
      ————————————-
       
       
      念のため、Eclipseの プロジェクト>クリーン から、修正したプロジェクトをクリーンして下さい。
      これで、「android-support-v7-appcompat」プロジェクトに表示されている×は消えると思います。
      消えない場合は、別の原因が考えられますので、Eclipseの「エラー・ログ」などに表示されるメッセージを確認してみてください。
       
       
      >“mytitle”がエラーになりますが、どんな設定が必要が必要ですか?
      R.string.mytitle は、string.xmlに個別に定義した変数です。定義されていない場合、エラー表示になります。
       
      プロジェクトの resフォルダ > values フォルダ > string.xml を開いてください。

      <string name="mytitle">背景を選択して下さい</string>

      の様に、string変数を定義します。
      タグの中身がActionBarに表示されるタイトルです。
       
       
      >“MENU_HELP”がエラーになりますが、どんな設定が必要が必要ですか?
      MENU_HELP はActionBarActivity で宣言した定数です。
      宣言部分が記事には抜けておりました。申し訳ありません。
      以下の宣言をActivityの頭に追加して下さい。
       
      —– 宣言 —–
      static final int MENU_HELP = 0;
      —————-
       
       
      >“ic_action_help”がエラーになりますが~
      アイコンを入れるフォルダは適宜使用するdpiのフォルダに適切なサイズを入れるべきかと思います。
      ターゲットの端末(dpi)が決まっていない場合は、各dpiのフォルダに各々のサイズのアイコン画像を入れておけば、どの端末でも対応できると思います。
      デベロッパーのサイトからActionBar Icon Pack というアイコン画像のzipファイルをダウンロートできます。
      このzipは各dpi毎に最適なサイズのアイコン画像が格納されているので、そのdpiの画像をプロジェクトにコピーして使うと便利です。
       
       
      疑問点は解消できましたでしょうか?
      不明な点などあれば、お手数ですが再度コメント頂ければと思います。

      Reply

コメントをどうぞ

メールアドレスは公開されません。* が付いている欄は必須項目です。


お気軽にお問い合わせください。

日本VTR実験室では、お仕事のご依頼、ブログ・コラムのご感想などを受け付けております。
アプリ開発・コンテンツ制作でお困りでしたら、お気軽にご相談ください。
ご連絡お待ちしております。

お問い合わせはこちらから

03-3541-1230

info@nvtrlab.jp

電話受付対応時間:平日AM9:30〜PM6:00