Android UI之Memu菜单


1. options menu

按menu键显示。 因为options menu在屏幕底部最多只能显示6个菜单项,这些菜单项称为icon menu,icon menu只支持文字(title) 以及icon,可以设置快捷键,不支持checkbox以及radio控件,所以不能设置checkable选项。而多于6的菜单项会以“more” icon menu来调出,称为expanded menu。它不支持icon,其他的特性都和icon menu一样!

两种使用方式:

(1)通过xml配置, menu.xml:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:Android="http://schemas.android.com/apk/res/android" >  
  3.     <item  
  4.         android:id="@+id/about"  
  5.         android:title="About"/>  
  6.     <item  
  7.         android:id="@+id/exit"  
  8.         android:title="Exit"/>  
  9. </menu>  
java代码:
  1. public boolean onCreateOptionsMenu(Menu menu) {  
  2.     MenuInflater inflater = getMenuInflater();  
  3.     inflater.inflate(R.layout.menu, menu);  
  4.     return super.onCreateOptionsMenu(menu);  
  5. }  
  6.   
  7. @Override  
  8. public boolean onOptionsItemSelected(MenuItem item) {  
  9.     int item_id = item.getItemId();  
  10.     switch (item_id) {  
  11.     case R.id.about:  
  12.         Toast.makeText(this"about", Toast.LENGTH_SHORT).show();  
  13.         break;  
  14.     case R.id.exit:  
  15.         Toast.makeText(this"exit", Toast.LENGTH_SHORT).show();  
  16.         break;  
  17.     }  
  18.     return true;  
  19. }  
(2) 通过代码:
  1. <span style="white-space:pre">    </span>public boolean onCreateOptionsMenu(Menu menu) {  
  2.         Log.i("com.test""------------onCreateOptionsMenu"); // 只执行一次   
  3.         menu.add(011"菜单1"); // 第二个属性itemId,第三个属性order   
  4.         menu.add(022"菜单2");  
  5.         return super.onCreateOptionsMenu(menu);  
  6.     }  
  7.     private boolean mIsChange = false;  
  8.     @Override  
  9.     public boolean onPrepareOptionsMenu(Menu menu) {  
  10.         Log.i("com.test""------------onPrepareOptionsMenu"); // 每次都执行   
  11.         if (mIsChange) {  
  12.             mIsChange = false;  
  13.             menu.getItem(1).setTitle("注销");  
  14.         } else {  
  15.             mIsChange = true;  
  16.             menu.getItem(1).setTitle("登录");  
  17.         }  
  18.         return super.onPrepareOptionsMenu(menu);  
  19.     }  
  20.   
  21.     @Override  
  22.     public boolean onOptionsItemSelected(MenuItem item) {  
  23.         switch (item.getItemId()) { // itemId   
  24.         case 1:  
  25.             Toast.makeText(this"111", Toast.LENGTH_SHORT).show();  
  26.             break;  
  27.         case 2:  
  28.             Toast.makeText(this"222", Toast.LENGTH_SHORT).show();  
  29.             break;  
  30.         }  
  31.         return true;  
  32.     }  

2. context menu

在相应的view上按几秒后显示

  •  Activity::registerForContextMenu(View view) 为某个view注册context menu,一般在Activity::onCreate里面调用。
  •  Activity::onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)创建context menu,和options menu不同,context meun每次显示时都会调用这个函数。
  • Activity::onContextItemSelected(MenuItem item) 处理选中的菜单项。
java代码:
  1. @Override  
  2. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
  3.     menu.add(011"中国");  
  4.     menu.add(022"美国");  
  5.     menu.add(033"日本");  
  6.     super.onCreateContextMenu(menu, v, menuInfo);  
  7. }  
  8.   
  9. @Override  
  10. public boolean onContextItemSelected(MenuItem item) {  
  11.     switch (item.getItemId()) {  
  12.     case 1:  
  13.         Toast.makeText(this"中国", Toast.LENGTH_SHORT).show();  
  14.         break;  
  15.     case 2:  
  16.         Toast.makeText(this"美国", Toast.LENGTH_SHORT).show();  
  17.         break;  
  18.     case 3:  
  19.         Toast.makeText(this"日本", Toast.LENGTH_SHORT).show();  
  20.         break;  
  21.     }  
  22.     return super.onContextItemSelected(item);  
  23. }  

3. sub menu

以上两种menu都可以加入子菜单,但是子菜单不能嵌套子菜单,最多两层。子菜单不支持icon

更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容