天天看点

android menu 实现动态修改menu

   在一个android创建菜单menu时,需要重写activity的oncreateoptionsmenu(menu menu)方法,这个方法只在第一次创建的时候调用一次,所以如果之后想对menu进行动态的修改,那么就不要再对oncreateoptionsmenu做什么手脚了。

      于是就要用到onprepareoptionsmenu(menu menu)方法了。onprepareoptionsmenu与oncreateoptionsmenu不同的是,他在每次按下menu硬键之前会被调用,所以可以在这里动态的改变menu。如果需要创建一个全新的菜单,那么可以在

public boolean onprepareoptionsmenu(menu menu) {

     super.onprepareoptionsmenu(menu);

     menu.clear();

     cb=(checkbox)findviewbyid(r.id.my_mms_item_checkbox);

   menu.add(0, menu_01, 0, "新建短信").seticon(r.drawable.menu_new_mms);

   log.d(tag,"cb.getvisibility():"+cb.getvisibility());

   if(cb.getvisibility()==view.gone)

    menu.add(0, menu_02, 0, "多选").seticon(r.drawable.mms_multiple);

   else

   {

    menu.add(0, menu_03, 0, "取消多选").seticon(r.drawable.mms_multiple);

    menu.add(0, menu_04, 0, "选择全部").seticon(r.drawable.mms_multiple);

   }

     return true;

  }

如果没有clear而直接add的话,那么菜单中菜单项是会“追加”的,这样,随着你不停的点menu键,菜单项就不停的增加。

另外,android系统默认的菜单样式是支持最多3个一行,如果有4项就每行2个有2行...如果想自定义样式,可以使用xml文件定义样式。

继续阅读