Android之通过xml设置Menu选项


一种简单方便的方法就是通过XML文件来配置Menu菜单,设置的时候用Menu或者MenuInflater

通常情况下,覆写Menu按键按下去的时候的回调函数onCreateOptionsMenu

在该函数中配置Menu

  1. MenuInflater inflater = getMenuInflater();  
  2. inflater.inflate(R.menu.groups, menu);  
该菜单对应的资源文件为res/menu/groups.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:Android="http://schemas.android.com/apk/res/android">  
  3.     <item android:id="@+id/browser_visibility"  
  4.         android:title="@string/browser_visibility" />  
  5.     <group android:id="@+id/browser">  
  6.         <item android:id="@+id/refresh"  
  7.             android:title="@string/browser_refresh" />  
  8.         <item android:id="@+id/bookmark"  
  9.             android:title="@string/browser_bookmark" />  
  10.     </group>  
  11.     <item android:id="@+id/email_visibility"  
  12.         android:title="@string/email_visibility" />  
  13.     <group android:id="@+id/email">  
  14.         <item android:id="@+id/reply"  
  15.             android:title="@string/email_reply" />  
  16.         <item android:id="@+id/forward"  
  17.             android:title="@string/email_forward" />  
  18.     </group>  
  19. </menu>  

当菜单中某一选项被按下的时候,通常覆写回调函数onOptionsItemSelected

  1. switch (item.getItemId()) {  
  2.     case R.id.browser_visibility:  
  3.        //对浏览组显示或者隐藏   
  4.        final boolean shouldShowBrowser = !mMenu.findItem(R.id.refresh).isVisible();  
  5.        mMenu.setGroupVisible(R.id.browser, shouldShowBrowser);  
  6.        break;  
  7.                   
  8.    case R.id.email_visibility:  
  9.        // 对email组进行显示或者隐藏   
  10.       final boolean shouldShowEmail =  !mMenu.findItem(R.id.reply).isVisible();  
  11.       mMenu.setGroupVisible(R.id.email, shouldShowEmail);  
  12.        break;  
  13.      // 默认选项会给出提示信息   
  14.      default:  
  15.       if (!item.hasSubMenu()) {  
  16.       Toast.makeText(this, item.getTitle(),Toast.LENGTH_SHORT).show();  
  17.         return true;  
  18.          }  
  19.      break;  
  20. }  

mMenu是一个全局的私有变量

如果一个应用程序中包含多个Activity,并且想在每个Actiivty中都显示Menu的话,可以考虑创建一个Activity,实现onCreateOptionsMenu()和onOptionItemSelected()两个方法,其他的Activity在实现的时候,继承该类就可以了

这样只需要管理一组Menu就可以了

如果需要添加菜单的话,只需要覆写onCreateOptionMenu()方法,并且调用super.onCreateOptionsMenu(menu)以便显示原来的Menu,然后用menu.add()来添加

相关内容