2月 23
今日の話題は ICS(Android 4.0)から ActionBar を取り上げます。

ActionBar は Android 3.0 (API Level 11) から導入された Android の新しいメニューの仕組みです。
これまでは本体にハードウェアキーとして「メニュー」ボタンがありましたが Android 3.0 以降では、「メニュー」を含むハードウェアボタンが基本的に廃止されました。メニュー以外のボタンはそれでもソフトウェアキーとして引き続き画面下部に配置されるのですがメニューボタンだけは廃止され Action Bar を使うことが推奨されています。

Action Bar の構成

Action Bar は4つの部分から構成されています。(参考サイト

  1. App Icon
  2. View Control
  3. Action Buttons
  4. Action Overflow

p0.png

App Icon は、アプリを識別する用途で用いられます。またトップレベルで無い場合は、ひとつ上の階層に遷移するためのボタンとしても使用されます。

View Control には、ドロップダウンメニューやタブコントロールなどを配置できます。そういうもの必要でない場合はアプリのタイトルを表示します。

Action Buttons には、頻度が高いアクションや重要なアクションに対する操作ボタンが割り当てられます。

Action Overflow には、頻度の低いアクションや Action Buttons の領域に入りきらなかったボタンが格納されます。

Action Bar の作成

Action Bar はこれまでのメニューと同様にプログラムまたはリソースから作成することができます。ただし、showAsAction という属性が追加されており、その項目が Action Buttons の領域に表示されるべきか Action Overflow の領域に表示するかの判断の材料になります。リソースで指定した場合の一例です。

res/menu/list.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_one"
         android:icon="@drawable/ic_action_one"
         android:title="@string/action_one"
         android:showAsAction="ifRoom" />
        :
    <item android:id="@+id/action_five"
         android:icon="@drawable/ic_action_five"
         android:title="@string/action_five"
         android:showAsAction="ifRoom" />
</menu>

ここで android:showAsAction には ifRoom が指定されています。これは、表示できない場合は Action Overflow 領域に格納せよという指示です。他に常に Action Buttons 領域に表示する always、常に Action Overflow に格納する never という設定値があります。

Action Bar の表示

Action Bar を表示させる場合はこれまで同様 Activity で onCreateOptionsMenu をオーバライドさせてやれば良いのですが、Fragment を使用する場合、各 Fragment の onCreateOptionsMenu をオーバライドさせてやることが可能です。

ここで良くやってしまうミスがタイトルにもつけた、おまじないの付け忘れです。
Fragment でメニューを追加する場合は、必ず setHasOptionsMenu(true) を付けましょう。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   
        setHasOptionsMenu(true); // 付け忘れないように!!
    }

サンプル

Action Bar を使用したサンプルとして Fragment でメニューを指定したものを作成しました。

p1.png p2.png

47都道府県をリスト表示したメイン画面と、アクションバーのアクションを実行して遷移する詳細画面の2画面で構成しています。それぞれ別のメニューを設定しています。詳細画面からメイン画面に戻るには Action Bar 上の App Icon を押してください。

また、メイン画面のリスト上のアイテムを長押しすると Action Mode になり、複数のアイテムが選択できるようになります。このときも別のメニューを表示するようにしています。

p3.png

完全なサンプルコード

いつものようにサンプルアプリのソースコードは Google Code で公開しています。完全なサンプルコードを参照したい場合はそちらをどうぞ。


Posted by sak+

Tagged with:
preload preload preload