【Android】ActionBarActivityを使ってみる
こんにちわ、pencoです。
今回はAndroid Support Library Rev.18から追加されたActionBarActivityを使って、Android2.1でActionBarを表示できるようにしたいと思います。
ActionBarは Android 3.0から追加されたタイトルバーに代わるウィジェットで、下図の様にメニューボタンなどが配置できます。
ではではさっそく やってみます。
インストール
まずはAndroid Support Libraryをインストールします。
(Eclipseでの説明になります。android-sdkまでのパスなどは環境によって異なります。)
Eclipseの Window > Android SDK Manager を起動します。
Extrasの中から Android Support Library にチェックを入れてインストールします。
ライブラリのインポート
次にライブラリプロジェクトをインポートします。
先程の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 プロジェクトが作成されます。
プロジェクトの作成
これで半分きました。長いですね。
次に、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フォルダにコピーします。
実装
やっと実装です。もう少しです。
先にテーマの設定を行います。
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; }
以上です!
最後まで閲覧頂きありがとうございます。
【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」にアイコンを作成するのでしょうか?」
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変数を定義します。
タグの中身が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の画像をプロジェクトにコピーして使うと便利です。
疑問点は解消できましたでしょうか?
不明な点などあれば、お手数ですが再度コメント頂ければと思います。