Android菜单详解

来源:互联网 发布:p2p网络借贷 编辑:程序博客网 时间:2024/05/25 12:20

Android菜单详解

今天讲的android菜单android提供了三种菜单类型,分别为options menu,context menu,sub menu。options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能中不能嵌套子菜单。options menu最多只能在屏幕最下面显示6个菜单选项,成为icon menu,icon menu不能有checkable选项。多余6的会以more icon menu来调出,成为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected 处理选中的菜单项。context menu是跟某个具体的view绑定在一起,在activity中用registerForContextMenu来为某个view注册context menu。context menu在显示前都会调用onCreateContextMenu来生成menu。onContextItemSelected选中的菜单项。android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。1、利用xml定义选项菜单a) options menu通过activity的onCreateOptionsMenu来生成b) 这个函数只会在menu第一次生成时调用。i. 任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。c) onOptionsItemSelected 用来处理选中的菜单项。2、 响应菜单项单击事件3种方式onMenuItemSelected(int featureId, MenuItem item) public boolean onOptionsItemSelected (MenuItem item) onMenuItemClick3、 动态添加、修改和删除菜单项菜单项的增删改查增:add, addSubMenu删:removeItem,removeGroup改: 选项菜单:onPrepareOptionsMenu()——> MenuItem->setXXX() 上下文菜单:onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {} 方法在每次调用上下文菜单时都会被调用一次4、 子菜单的创建 Xml创建 动态创建Menu submenu = Menu.addSubMenu(x, x, x, x)submenu.add()submenu.add()main_menu.addSubMenu(x,x,x,x);或:getMenuInflater ().inflater(R.menu.submenu, submenu);5、 带单选或复选的子菜单public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.second_menu, menu);SubMenu sb = menu.findItem(R.id.item3).getSubMenu();sb.setIcon(R.drawable.ic_launcher);// sb.setGroupCheckable(0, true, true);sb.getItem(0).setCheckable(true);sb.getItem(0).setChecked(true);this.menu = menu;return super.onCreateOptionsMenu(menu);}6、 上下文子菜单public class ContextMenuActivity extends Activity {ContextMenu menu = null;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);TextView tv = (TextView) this.findViewById(R.id.textView);this.registerForContextMenu(tv);}public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){menu.setHeaderTitle("上下文菜单");menu.setHeaderIcon(R.drawable.ic_launcher);getMenuInflater().inflate(R.menu.context_menu, menu);this.menu = menu;}public boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.subitem1:Toast.makeText(this, "subitem1", Toast.LENGTH_SHORT).show();break;case R.id.subitem2:Toast.makeText(this, "subitem2", Toast.LENGTH_SHORT).show();break;case R.id.subitem3:Toast.makeText(this, "subitem3", Toast.LENGTH_SHORT).show();break;}return true;}}7、 演示上下文菜单的二级菜单和动态修改一、option Menu在此介绍最简单的菜单应用代码如下: 二、sub Menu将onCreateOptionsMenu内代码改成如下代码,即可实现submenu: