It’s now or never

IT系の技術ブログです。気になったこと、勉強したことを備忘録的にまとめて行きます。

【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:targetSdkVersionAPIレベル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 buttonsAction 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/