【Android】ActionBarを使ってみる ① (メニューボタン)
Android 3.0 (API Level 11) から導入されたActionBarについて、
少しずつ勉強していきたいと思います。
ActionBarとは
Android 3.0以降で提供されているアクティビティ用のウィジェットです。 ActionBarは、4つの領域に分かれており各領域からアプリへの操作を制御することが可能です。
1.App icon
アプリのテーマアイコンを表示する領域です。 タップにより、画面ナビゲーション階層の制御を行います。
2.View control
ドロップダウンメニューやタブコントロールなどビュー切り替えの機能を提供しています。 検索バーを表示して検索機能を実装することも可能です。
3.Action buttons
アプリ操作のアクションボタンを配置する領域です。 ボタンを長押しすることで、アクションの名前を表示します。
4.Action overflow
3.Action buttonsでは、入りきらないボタンや、使用頻度の低いボタンを配置する領域です。
※ 参考
android:targetSdkVersionがAPIレベル11以上を指定している場合、
ActionBarはデフォルトで表示されるようになっています。
※ただし、android:minSdkVersionが11以上でない場合は、
ActionBarクラスへアクセスして、APIを実行することができません
ActionBarを非表示にするには
AndroidManifestのActivityにて、
<android:theme="@android:style/Theme.Holo.NoActionBar">
を指定します。
または、
ソースコードからActionBarクラスインスタンスを呼び出し、hide()を実行することでも、
非表示にすることが可能です。
ActionBar actionbar = getActionBar(); actionbar.hide();
ActionBarにメニューボタンを表示する
Action buttonsとAction overflowにメニューボタンを配置してみます。
1.メニューリソースの定義
メニューボタンを定義するには、まずres/menuディレクトリにあるメニューリソースxmlを作成します。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:icon="@android:drawable/ic_menu_share" android:showAsAction="always" android:title="hogehoge"/> </menu>
| 属性 | 説明 |
|---|---|
| id | リソースID |
| icon | アイコン画像 |
| showAsAction | メニュー項目をどこへ表示するかを指定する |
| title | メニュータイトル ※iconが指定されている場合は、長押しするとタイトルが表示される |
※詳しい属性の情報については、メニューリソースのドキュメントを参照してください。
showAsActionは、各メニューボタンをアクションバーのどこへ配置するかの定義で、
下記5つのオプションを指定可能です。
never:
メニューボタンは、常にAction overflow領域へ表示される。ifRoom:
表示領域があれば、Action buttons領域へ表示される。
表示できない場合は、Action overflow領域へ表示される。withText:
ボタンアイコンと一緒にテキストを表示するcollapseActionView:
action viewを関連付けるて折り畳めるメニューを表示する。
(action viewの指定がない場合は、標準動作となる)always:
常にAction buttons領域へ表示される。
2.リソースの適用
作成したリソースxmlは、
ActivityクラスのonCreateOptionsMenu()をオーバーライドして、
inflateすることで画面上に表示されます。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.example_menu, menu);
return true;
}
3.ボタンイベントのハンドリング
各メニューボタンのイベントは、ActivityクラスのonOptionsItemSelected()をオーバーライドして、
ハンドリングすることができます。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Log.d("", "menu1 tap.");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
参考サイト
http://www.techdoctranslator.com/android/guide/ui/actionbar http://sakplus.jp/2012/02/23/actionbar/