Action Bar

Overview

Cheat Sheet

Android 3.0 (API11) or higher

res/menu/menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_search"
          android:icon="@android:drawable/ic_menu_search"
          android:title="Search"
          android:showAsAction="ifRoom" />
</menu>

MainActivity.java

...
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MainActivity extends Activity {
    ...
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_search:
                // do something ...
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

v7 Support Libraries

appcompat-v7 により Android 3.0 (API11) 以前の機種でも、Action Bar が実現できる。

テーマは appcompat-v7 に含まれる Theme.AppCompat 系を利用する。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"></style>

Menu Resource において、いくつかの属性 android:showAsAction などは含まれないため、app: 等の独自のXML名前空間を追加して指定する。

<menu ...
      xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item ...
          app:showAsAction="ifRoom" />
</menu>

Activity は android.support.v7.app.ActionBarActivity を継承する。ActionBarActionBarActivity#getSupportActionBar から取得する。

...
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
...

public class SearchDialogActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActionBar actionBar = getSupportActionBar();
        ...
    }
}