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を指定した場合
splitActionBarWhenNarrowを指定しない場合。入る分は最上部のアクションバーに配置され、それ以外はメニューからドロップリストとして表示される。