そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

Android。フラグメントでアクションバーを使う。

コード側のポイントは3つだけです。
1.onCreateViewの中でsetHasOptionsMenu(true)でオプションメニューを有効にして
2.onCreateOptionsMenuでメニューの内容の指定
3.onOptionsItemSelectedでメニューを選択されたときの処理を実装

public class TaskListFragment extends Fragment {
	
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
       setHasOptionsMenu(true);
       return inflater.inflate(R.layout.tasklist_fragment, container, false);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

        inflater.inflate(R.menu.activity_std_main, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Toast.makeText(getActivity(), "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();
        return super.onOptionsItemSelected(item);
    }
}

メニューの内容はres/menu/の下にxmlで指定。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_refresh"
        android:title="@string/menu_refresh"
        android:icon="@drawable/std_button_24"
        android:showAsAction="ifRoom" />
    <item android:id="@+id/menu_project"
        android:title="@string/menu_projectlist"
        android:icon="@drawable/std_button_26"
        android:showAsAction="ifRoom" />
    <item android:id="@+id/menu_today"
        android:title="@string/menu_today"
        android:icon="@drawable/std_button_28"
        android:showAsAction="ifRoom" />
    <item android:id="@+id/menu_new_task"
        android:title="@string/menu_new_task"
        android:icon="@drawable/std_button_30"
        android:showAsAction="ifRoom" />
</menu>


後はマニフェストファイルのandroid:uiOptionsで、ユーザの環境に合わせてどんな見せ方をしたいのかを指定。splitActionBarWhenNarrowを指定した場合は、アクションバーに収まりきらない場合は、スプリットアクションバー(最下部に表示されるバー)に配置するという指定。

<activity
    android:name="com.nextconceptdc.std.ui.TaskListFragment"
    android:label="@string/title_activity_std_main"
    android:uiOptions="splitActionBarWhenNarrow" >
</activity>

splitActionBarWhenNarrowを指定した場合
f:id:begirama:20121203102928p:plain


splitActionBarWhenNarrowを指定しない場合。入る分は最上部のアクションバーに配置され、それ以外はメニューからドロップリストとして表示される。
f:id:begirama:20121203102934p:plain