Android5.0引入了工具栏这个新增组件。在此之前,应用中用于导航或提供菜单操作的是操作栏。
工具栏菜单由菜单项组成,它占据着工具栏的右上方区域。
1.在XML文件中定义菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/new_crime"
android:icon="@android:drawable/ic_meun_add"
android:tittle="@string/new_crime"
app:showAsAction="ifRoom|withText" />
</menu>
2.创建菜单
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_crime_list, menu);
}
...
Fragment.onCreateOptionsMenu(Menu, MenuInflater)方法是由FragmentManager负责调用的。因此,当activity接收到操作系统的onCreateOptionsMenu(...)方法回调请求时,必须要明确告诉FragmentManager:其管理的fragment应接收onCreateOptionsMenu(...)方法的调用指令。要通知FragmentManager需要调用以下方法:
public void setHasOptionsMenu(boolean hasMenu)
class CrimeListFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
}
3.响应菜单项选择
点击菜单中的菜单项时,fragment会收到onOptionsItemSelected(MenuItem)方法的回调请求。通过检查菜单项ID,可确定选中的是哪个菜单项。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.new_crime:
...
default:
return super.onOptionsItemSelected(item);
}
}
网友评论