android中菜单分为三种,分别是,options menu 选项菜单,sub menu 子菜单,context menu 上下文菜单。下面分别举例演示这三种菜单:


新建一个android project,

options menu,第一种方法,通过xml定义选项菜单,在res文件夹中新建一个名为menu的文件夹,在其内新建一个options_menu.xml的文件:

view plain copy to clipboard print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <menuxmlns:android="http://schemas.android.com/apk/res/android">
  3. <item
  4. android:id="@+id/newFile"
  5. android:icon="@drawable/ic_launcher"
  6. android:title="@string/newFile"
  7. />
  8. <!--android:icon设置菜单选项的图标
  9. android:title设置菜单选项的标题-->
  10. <item
  11. android:id="@+id/exit"
  12. android:icon="@drawable/ic_launcher"
  13. android:title="@string/exit"
  14. />
  15. </menu>
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/newFile" android:icon="@drawable/ic_launcher" android:title="@string/newFile" /> <!-- android:icon 设置菜单选项的图标 android:title 设置菜单选项的标题 --> <item android:id="@+id/exit" android:icon="@drawable/ic_launcher" android:title="@string/exit" /> </menu>
在MenuTestActivity1中:

view plain copy to clipboard print ?
  1. packagecn.sword.activity;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.Menu;
  5. importandroid.view.MenuInflater;
  6. importandroid.view.MenuItem;
  7. importandroid.view.MenuItem.OnMenuItemClickListener;
  8. importandroid.widget.Toast;
  9. publicclassMenuTestActivity1extendsActivityimplementsOnMenuItemClickListener{
  10. /**Calledwhentheactivityisfirstcreated.*/
  11. @Override
  12. publicvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. }
  16. @Override
  17. publicbooleanonCreateOptionsMenu(Menumenu){
  18. MenuInflaterinflater=this.getMenuInflater();
  19. inflater.inflate(R.menu.options_menu,menu);
  20. //第一种响应菜单点击事件的方法
  21. //为每一个菜单选项添加监听事件
  22. //在覆盖的onMenuItemClick()方法中判断并触发监听事件
  23. for(inti=0;i<menu.size();i++){
  24. menu.getItem(i).setOnMenuItemClickListener((OnMenuItemClickListener)this);
  25. }
  26. returnsuper.onCreateOptionsMenu(menu);
  27. }
  28. /*第二种响应菜单点击事件的方法覆盖onOptionsItemSelected()方法
  29. @Override
  30. publicbooleanonOptionsItemSelected(MenuItemitem){
  31. switch(item.getItemId()){
  32. caseR.id.newFile:
  33. Toast.makeText(this,"newFile",Toast.LENGTH_LONG).show();
  34. break;
  35. caseR.id.exit:
  36. this.finish();//退出程序
  37. break;
  38. }
  39. returnsuper.onOptionsItemSelected(item);
  40. }*/
  41. publicbooleanonMenuItemClick(MenuItemitem){
  42. switch(item.getItemId()){
  43. caseR.id.newFile:
  44. Toast.makeText(this,"newFile",Toast.LENGTH_LONG).show();
  45. break;
  46. caseR.id.exit:
  47. this.finish();
  48. }
  49. returnfalse;
  50. }
  51. }
package cn.sword.activity; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.widget.Toast; public class MenuTestActivity1 extends Activity implements OnMenuItemClickListener{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); //第一种响应菜单点击事件的方法 //为每一个菜单选项添加监听事件 //在覆盖的onMenuItemClick()方法中判断并触发监听事件 for(int i=0;i<menu.size();i++){ menu.getItem(i).setOnMenuItemClickListener((OnMenuItemClickListener) this); } return super.onCreateOptionsMenu(menu); } /*第二种响应菜单点击事件的方法 覆盖onOptionsItemSelected()方法 @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.newFile: Toast.makeText(this,"new File", Toast.LENGTH_LONG).show(); break; case R.id.exit: this.finish();//退出程序 break; } return super.onOptionsItemSelected(item); }*/ public boolean onMenuItemClick(MenuItem item){ switch(item.getItemId()){ case R.id.newFile: Toast.makeText(this, "new File", Toast.LENGTH_LONG).show(); break; case R.id.exit: this.finish(); } return false; } }


在模拟器中点击Menu键效果:




options menu,第二种方法,动态添加删除菜单


在MenuTestActivity2中:

view plain copy to clipboard print ?
  1. packagecn.class3g.activity;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.Menu;
  5. importandroid.view.MenuInflater;
  6. importandroid.view.MenuItem;
  7. importandroid.widget.Toast;
  8. publicclassMenuTestActivity2extendsActivity{
  9. <spanstyle="white-space:pre"></span>//定义菜单项
  10. privatestaticfinalintSAVE=1;
  11. privatestaticfinalintSAVESAVE_AS=SAVE+1;
  12. privatestaticfinalintDELETE=SAVE+2;
  13. //声明一个menu对象
  14. Menumenu=null;
package cn.class3g.activity; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; public class MenuTestActivity2 extends Activity { <span style="white-space:pre"> </span>//定义菜单项 private static final int SAVE=1; private static final int SAVE_AS = SAVE+1; private static final int DELETE = SAVE+2; //声明一个menu对象 Menu menu = null; view plain copy to clipboard print ?
  1. publicvoidonCreate(BundlesavedInstanceState){
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.main);
  4. }
  5. publicbooleanonCreateOptionsMenu(Menumenu){
  6. MenuInflaterinflater=this.getMenuInflater();
  7. inflater.inflate(R.menu.options_menu,menu);
  8. //向菜单中添加菜单项
  9. menu.add(1,SAVE,1,"保存");
  10. menu.add(1,SAVE_AS,2,"另存为");
  11. menu.add(1,DELETE,3,"删除保存");
  12. //设置菜单项的图标
  13. menu.findItem(SAVE).setIcon(R.drawable.ic_launcher);
  14. this.menu=menu;
  15. returntrue;
  16. }
  17. <spanstyle="white-space:pre"></span>//动态的修改菜单title
  18. inti=1;
  19. publicbooleanonPrepareOptionsMenu(Menumenu){
  20. MenuItemitem=menu.findItem(SAVE_AS);
  21. item.setTitle(item.getTitle()+""+i);
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); //向菜单中添加菜单项 menu.add(1, SAVE, 1, "保存"); menu.add(1,SAVE_AS, 2, "另存为"); menu.add(1,DELETE, 3, "删除保存"); //设置菜单项的图标 menu.findItem(SAVE).setIcon(R.drawable.ic_launcher); this.menu = menu; return true; } <span style="white-space:pre"> </span>//动态的修改菜单title int i=1; public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(SAVE_AS); item.setTitle(item.getTitle() + "" + i); view plain copy to clipboard print ?
  1. i++;
  2. returnsuper.onPrepareOptionsMenu(menu);
  3. }
  4. lt;spanstyle="white-space:pre"></span>//响应菜单单击事件
  5. publicbooleanonOptionsItemSelected(MenuItemitem){
  6. switch(item.getItemId()){
  7. caseR.id.newFile:
i++; return super.onPrepareOptionsMenu(menu); } <span style="white-space:pre"> </span>//响应菜单单击事件 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.newFile: view plain copy to clipboard print ?
  1. Toast.makeText(this,"newfile",Toast.LENGTH_LONG).show();//利用Toast弹出文本信息
  2. break;
  3. caseR.id.exit:
  4. //Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
  5. this.finish();//关闭Activity
  6. break;
  7. caseDELETE:<prename="code"class="html"><spanstyle="white-space:pre"></span>//menu.removeGroup(1);//删除一组菜单
Toast.makeText(this, "new file", Toast.LENGTH_LONG).show();//利用Toast弹出文本信息 break; case R.id.exit: // Toast.makeText(this, "exit", Toast.LENGTH_LONG).show(); this.finish();//关闭Activity break; case DELETE:<pre name="code" class="html"><span style="white-space:pre"> </span>//menu.removeGroup(1);//删除一组菜单 menu.removeItem(SAVE_AS);//删除一个菜单break;}return true;}}

  
sub menu 子菜单

利用xml定义菜单参考options menu。

动态的添加子菜单:

在MenuTestActivity3中:

view plain copy to clipboard print ?
  1. packagecn.sword.activity;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.Menu;
  5. importandroid.view.MenuInflater;
  6. importandroid.view.MenuItem;
  7. importandroid.view.SubMenu;
  8. importandroid.widget.Toast;
  9. publicclassMenuTestActivity3extendsActivity{
  10. <spanstyle="white-space:pre"></span>//定义菜单项
  11. privatestaticfinalintSUBMENU=10;
  12. privatestaticfinalintSUBITEM1=SUBMENU+1;
  13. privatestaticfinalintSUBITEM2=SUBMENU+2;
  14. privatestaticfinalintSUBITEM3=SUBMENU+3;
  15. @Override
  16. protectedvoidonCreate(BundlesavedInstanceState){
  17. super.onCreate(savedInstanceState);
  18. this.setContentView(R.layout.main);
  19. }
  20. publicbooleanonCreateOptionsMenu(Menumenu){
  21. MenuInflaterinflater=this.getMenuInflater();
  22. inflater.inflate(R.menu.sub_menu,menu);
  23. //添加子菜单
  24. SubMenusubMenu=menu.addSubMenu(1,SUBMENU,1,"子菜单");
  25. subMenu.add(20,SUBITEM1,1,"subitem1");
  26. subMenu.add(20,SUBITEM2,2,"subitem2");
  27. subMenu.add(30,SUBITEM3,3,"subitem3");
  28. subMenu.setGroupCheckable(20,true,false);
  29. //第二个参数是否可选
  30. //当第三个参数为true时为这组菜单为互斥(单选)菜单
  31. //当第三个参数为false时为组菜单为复选菜单
  32. MenuItemitem=subMenu.getItem(0);
  33. //item.setCheckable(false);//设置该项菜单为单选或复选
  34. item.setChecked(true);//设置菜单的默认选项
  35. //subMenu.getItem(0).setCheckable(true);
  36. returntrue;
  37. }
  38. @Override
  39. publicbooleanonOptionsItemSelected(MenuItemitem){
  40. switch(item.getItemId()){
  41. caseR.id.menuitem1:
  42. Toast.makeText(this,"menuitem1",Toast.LENGTH_LONG).show();
  43. break;
  44. caseR.id.menuitem2:
  45. Toast.makeText(this,"menuitem2",Toast.LENGTH_LONG).show();
  46. break;
  47. caseR.id.subitem1:
  48. Toast.makeText(this,"subitem1",Toast.LENGTH_LONG).show();
  49. break;
  50. caseR.id.subitem2:
  51. Toast.makeText(this,"subitem2",Toast.LENGTH_LONG).show();
  52. break;
  53. caseSUBITEM1:
  54. Toast.makeText(this,"SUBITEM1",Toast.LENGTH_LONG).show();
  55. break;
  56. caseSUBITEM2:
  57. Toast.makeText(this,"SUBITEM2",Toast.LENGTH_LONG).show();
  58. //this.finish();//退出程序
  59. break;
  60. }
  61. returnsuper.onOptionsItemSelected(item);
  62. }
  63. }
package cn.sword.activity; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class MenuTestActivity3 extends Activity { <span style="white-space:pre"> </span>//定义菜单项 private static final int SUBMENU = 10; private static final int SUBITEM1 = SUBMENU+1; private static final int SUBITEM2 = SUBMENU+2; private static final int SUBITEM3 = SUBMENU+3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); } public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.sub_menu, menu); //添加子菜单 SubMenu subMenu = menu.addSubMenu(1,SUBMENU,1,"子菜单"); subMenu.add(20,SUBITEM1,1,"subitem1"); subMenu.add(20,SUBITEM2,2,"subitem2"); subMenu.add(30,SUBITEM3,3,"subitem3"); subMenu.setGroupCheckable(20, true, false); //第二个参数是否可选 //当第三个参数为true时为这组菜单为互斥(单选)菜单 //当第三个参数为false时为组菜单为复选菜单 MenuItem item = subMenu.getItem(0); //item.setCheckable(false);//设置该项菜单为单选或复选 item.setChecked(true);//设置菜单的默认选项 //subMenu.getItem(0).setCheckable(true); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.menuitem1: Toast.makeText(this,"menuitem1", Toast.LENGTH_LONG).show(); break; case R.id.menuitem2: Toast.makeText(this,"menuitem2", Toast.LENGTH_LONG).show(); break; case R.id.subitem1: Toast.makeText(this,"subitem1", Toast.LENGTH_LONG).show(); break; case R.id.subitem2: Toast.makeText(this,"subitem2", Toast.LENGTH_LONG).show(); break; case SUBITEM1: Toast.makeText(this,"SUBITEM1", Toast.LENGTH_LONG).show(); break; case SUBITEM2: Toast.makeText(this,"SUBITEM2", Toast.LENGTH_LONG).show(); //this.finish();//退出程序 break; } return super.onOptionsItemSelected(item); } }
在模拟器中点击Menu键:


单击子菜单:


context menu 上下文菜单:context menu需要绑定在TextView上并在其上按2s后显示。

在MenuTestActivity4中:

view plain copy to clipboard print ?
  1. packagecn.sword.activity;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.ContextMenu;
  5. importandroid.view.ContextMenu.ContextMenuInfo;
  6. importandroid.view.MenuInflater;
  7. importandroid.view.MenuItem;
  8. importandroid.view.View;
  9. importandroid.widget.TextView;
  10. importandroid.widget.Toast;
  11. publicclassMenuTestActivity4extendsActivity{
  12. @Override
  13. protectedvoidonCreate(BundlesavedInstanceState){
  14. super.onCreate(savedInstanceState);
  15. this.setContentView(R.layout.main);
  16. //将上下文菜单绑定到TextView上
  17. TextViewtv=(TextView)this.findViewById(R.id.textView);
  18. this.registerForContextMenu(tv);
  19. }
  20. @Override
  21. publicbooleanonContextItemSelected(MenuItemitem){
  22. switch(item.getItemId()){
  23. caseR.id.subitem1:
  24. Toast.makeText(this,"subitem1",Toast.LENGTH_LONG).show();
  25. break;
  26. caseR.id.subitem2:
  27. Toast.makeText(this,"subitem2",Toast.LENGTH_LONG).show();
  28. break;
  29. }
  30. returnsuper.onContextItemSelected(item);
  31. }
  32. //每次上下文菜单显示都会调用
  33. publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
  34. ContextMenuInfomenuInfo){
  35. MenuInflaterinflater=this.getMenuInflater();
  36. inflater.inflate(R.menu.sub_menu,menu);
  37. super.onCreateContextMenu(menu,v,menuInfo);
  38. }
  39. }
package cn.sword.activity; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MenuTestActivity4 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); //将上下文菜单绑定到TextView上 TextView tv = (TextView) this.findViewById(R.id.textView); this.registerForContextMenu(tv); } @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.subitem1: Toast.makeText(this, "subitem1",Toast.LENGTH_LONG).show(); break; case R.id.subitem2: Toast.makeText(this, "subitem2",Toast.LENGTH_LONG).show(); break; } return super.onContextItemSelected(item); } //每次上下文菜单显示都会调用 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.sub_menu, menu); super.onCreateContextMenu(menu, v, menuInfo); } }
运行模拟器,点击文本内容2s后:


更多相关文章

  1. Golang MD5算法与 java(android)的互通
  2. CrossWalk项目main_delegate类的问题
  3. Hardcoded string "xxxxxxxxxxxx", should use @string resource
  4. android ui 遇到的问题汇总
  5. android 点击获取验证码显示倒计时并不可用
  6. Android(安卓)Studio使用技巧
  7. Android(安卓)应用第一次运行时,引导页面的设置方法(只让程序Aciti
  8. android 学习四 加载图片
  9. Android用户界面 UI组件--TextView及其子类(三) EditView以及各

随机推荐

  1. mk文件中配置lib arm64 文件夹
  2. Android DataBinding介绍
  3. Android - 绘画出圆并保存为图片(详)
  4. Android com.android.internal.R 添加新i
  5. uni-app 跳转Android原生界面(Activity),
  6. Android 文件操作,删除,拷贝文件等
  7. Android Interface Definition Language
  8. layer-list使用
  9. 「Android」SurfaceFlinger分析
  10. Android常遇疑难问题