2012/07/11

Android:ActionBar/ActionModeのListModeを使う


ActionBarのViewControlは、アプリ内のViewを切り替えるUIとして使われます。
ViewControlは3つのActionModeを持っています。
  • Normal
  • Tab
  • List

今回はListModeについてです。

●ActionMode:ListMode

ActionModeをListModeに設定すると、ViewControl部分にドロップダウンメニューが表示
されます。



・サンプルコード
ActionBar actBar = getActionBar();
// リストに表示するアダプタを登録
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, new String[] {
                "List Item 1", "List Item 2" });
// Navigationコールバックを登録する
actBar.setListNavigationCallbacks(adapter,
        new ActionBar.OnNavigationListener() {
            @Override
            public boolean onNavigationItemSelected(int itemPosition,
                    long itemId) {
                return false;
            }
        });
// 最後にNavigationModeをListModeに設定
actBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

しかし、これだとアプリのタイトル文字列とケンカして見づらいです。
ListModeを使う場合、アプリアイコンで十分アイデンティティが確保されていれば、
アプリタイトルを非表示としたほうが良い場合がありそうです。


・アプリタイトルを表示しないサンプルコード

ActionBar actBar = getActionBar();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, new String[] {
                "List Item 1", "List Item 2" });
actBar.setListNavigationCallbacks(adapter,
        new ActionBar.OnNavigationListener() {
            @Override
            public boolean onNavigationItemSelected(int itemPosition,
                    long itemId) {
                return false;
            }
        });
// アプリタイトルを非表示に設定
actBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
actBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

●ActionBarを上下に分割して表示

ListModeを採用すると、どうしてもActionBarの領域が狭くなりがちです。
ここにActionボタンも併用すると窮屈なUIになってしまいます。

その場合、ActionBarを画面上下に分割するsplitActionBarWhenNarrowの利用を考えます。



実装方法はいたってシンプル。
AndroidManifest.xmlのActivity要素にandroid:uiOptions="splitActionBarWhenNarrow"
を追加します。

・サンプルコード

<activity
    android:name=".MainActivity"
    android:label="@string/title_activity_main"
    android:uiOptions="splitActionBarWhenNarrow" >

ただし、画面横幅が一定サイズを超える場合はsplitActionBarWhenNarrowが有効とならな
い場合があります。
http://yuki312.blogspot.jp/2012/07/androidsplitactionbarwhennarrow.html

以上です。