android中菜单分为三种,分别是,options menu 选项菜单,sub menu 子菜单,context menu 上下文菜单。下面分别举例演示这三种菜单:
新建一个android project,
options menu,第一种方法,通过xml定义选项菜单,在res文件夹中新建一个名为menu的文件夹,在其内新建一个options_menu.xml的文件:
- <?xmlversion="1.0"encoding="utf-8"?>
-
<menuxmlns: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中:
-
packagecn.sword.activity;
-
-
importandroid.app.Activity;
-
importandroid.os.Bundle;
-
importandroid.view.Menu;
-
importandroid.view.MenuInflater;
-
importandroid.view.MenuItem;
-
importandroid.view.MenuItem.OnMenuItemClickListener;
-
importandroid.widget.Toast;
-
-
publicclassMenuTestActivity1extendsActivityimplementsOnMenuItemClickListener{
-
/**Calledwhentheactivityisfirstcreated.*/
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
}
-
-
@Override
-
publicbooleanonCreateOptionsMenu(Menumenu){
-
MenuInflaterinflater=this.getMenuInflater();
-
inflater.inflate(R.menu.options_menu,menu);
-
//第一种响应菜单点击事件的方法
-
//为每一个菜单选项添加监听事件
-
//在覆盖的onMenuItemClick()方法中判断并触发监听事件
-
for(inti=0;i<menu.size();i++){
-
menu.getItem(i).setOnMenuItemClickListener((OnMenuItemClickListener)this);
-
}
-
-
returnsuper.onCreateOptionsMenu(menu);
-
}
-
-
/*第二种响应菜单点击事件的方法覆盖onOptionsItemSelected()方法
-
@Override
-
publicbooleanonOptionsItemSelected(MenuItemitem){
-
switch(item.getItemId()){
-
caseR.id.newFile:
-
Toast.makeText(this,"newFile",Toast.LENGTH_LONG).show();
-
break;
-
caseR.id.exit:
-
this.finish();//退出程序
-
break;
-
}
-
-
returnsuper.onOptionsItemSelected(item);
-
}*/
-
-
publicbooleanonMenuItemClick(MenuItemitem){
-
switch(item.getItemId()){
-
caseR.id.newFile:
-
Toast.makeText(this,"newFile",Toast.LENGTH_LONG).show();
-
break;
-
caseR.id.exit:
-
this.finish();
-
}
-
-
returnfalse;
-
}
-
- }
在模拟器中点击Menu键效果:

options menu,第二种方法,动态添加删除菜单
在MenuTestActivity2中:
-
packagecn.class3g.activity;
-
-
importandroid.app.Activity;
-
importandroid.os.Bundle;
-
importandroid.view.Menu;
-
importandroid.view.MenuInflater;
-
importandroid.view.MenuItem;
-
importandroid.widget.Toast;
-
-
publicclassMenuTestActivity2extendsActivity{
-
<spanstyle="white-space:pre"></span>//定义菜单项
-
privatestaticfinalintSAVE=1;
-
privatestaticfinalintSAVESAVE_AS=SAVE+1;
-
privatestaticfinalintDELETE=SAVE+2;
-
//声明一个menu对象
-
Menumenu=null;
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
}
-
-
publicbooleanonCreateOptionsMenu(Menumenu){
-
MenuInflaterinflater=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;
-
-
returntrue;
-
}
-
-
<spanstyle="white-space:pre"></span>//动态的修改菜单title
-
inti=1;
-
publicbooleanonPrepareOptionsMenu(Menumenu){
-
MenuItemitem=menu.findItem(SAVE_AS);
- item.setTitle(item.getTitle()+""+i);
-
i++;
-
returnsuper.onPrepareOptionsMenu(menu);
-
}
-
lt;spanstyle="white-space:pre"></span>//响应菜单单击事件
-
publicbooleanonOptionsItemSelected(MenuItemitem){
-
switch(item.getItemId()){
- caseR.id.newFile:
-
Toast.makeText(this,"newfile",Toast.LENGTH_LONG).show();//利用Toast弹出文本信息
-
break;
-
caseR.id.exit:
-
//Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
-
this.finish();//关闭Activity
-
break;
-
caseDELETE:<prename="code"class="html"><spanstyle="white-space:pre"></span>//menu.removeGroup(1);//删除一组菜单
menu.removeItem(SAVE_AS);//删除一个菜单break;}return true;}}
sub menu 子菜单
利用xml定义菜单参考options menu。
动态的添加子菜单:
在MenuTestActivity3中:
- packagecn.sword.activity;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.view.SubMenu;
- importandroid.widget.Toast;
- publicclassMenuTestActivity3extendsActivity{
-
<spanstyle="white-space:pre"></span>//定义菜单项
-
privatestaticfinalintSUBMENU=10;
-
privatestaticfinalintSUBITEM1=SUBMENU+1;
-
privatestaticfinalintSUBITEM2=SUBMENU+2;
-
privatestaticfinalintSUBITEM3=SUBMENU+3;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- }
- publicbooleanonCreateOptionsMenu(Menumenu){
-
MenuInflaterinflater=this.getMenuInflater();
- inflater.inflate(R.menu.sub_menu,menu);
- //添加子菜单
-
SubMenusubMenu=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时为组菜单为复选菜单
-
MenuItemitem=subMenu.getItem(0);
- //item.setCheckable(false);//设置该项菜单为单选或复选
- item.setChecked(true);//设置菜单的默认选项
- //subMenu.getItem(0).setCheckable(true);
- returntrue;
- }
- @Override
- publicbooleanonOptionsItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.menuitem1:
- Toast.makeText(this,"menuitem1",Toast.LENGTH_LONG).show();
- break;
- caseR.id.menuitem2:
- Toast.makeText(this,"menuitem2",Toast.LENGTH_LONG).show();
- break;
- caseR.id.subitem1:
- Toast.makeText(this,"subitem1",Toast.LENGTH_LONG).show();
- break;
- caseR.id.subitem2:
- Toast.makeText(this,"subitem2",Toast.LENGTH_LONG).show();
- break;
- caseSUBITEM1:
- Toast.makeText(this,"SUBITEM1",Toast.LENGTH_LONG).show();
- break;
- caseSUBITEM2:
- Toast.makeText(this,"SUBITEM2",Toast.LENGTH_LONG).show();
- //this.finish();//退出程序
- break;
- }
- returnsuper.onOptionsItemSelected(item);
- }
- }
在模拟器中点击Menu键:

单击子菜单:

context menu 上下文菜单:context menu需要绑定在TextView上并在其上按2s后显示。
在MenuTestActivity4中:
-
packagecn.sword.activity;
-
-
importandroid.app.Activity;
-
importandroid.os.Bundle;
-
importandroid.view.ContextMenu;
-
importandroid.view.ContextMenu.ContextMenuInfo;
-
importandroid.view.MenuInflater;
-
importandroid.view.MenuItem;
-
importandroid.view.View;
-
importandroid.widget.TextView;
-
importandroid.widget.Toast;
-
-
publicclassMenuTestActivity4extendsActivity{
-
@Override
-
protectedvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
this.setContentView(R.layout.main);
-
//将上下文菜单绑定到TextView上
-
TextViewtv=(TextView)this.findViewById(R.id.textView);
-
this.registerForContextMenu(tv);
-
}
-
-
@Override
-
publicbooleanonContextItemSelected(MenuItemitem){
-
switch(item.getItemId()){
-
caseR.id.subitem1:
-
Toast.makeText(this,"subitem1",Toast.LENGTH_LONG).show();
-
break;
-
caseR.id.subitem2:
-
Toast.makeText(this,"subitem2",Toast.LENGTH_LONG).show();
-
break;
-
}
-
returnsuper.onContextItemSelected(item);
-
}
-
-
//每次上下文菜单显示都会调用
-
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
-
ContextMenuInfomenuInfo){
-
-
MenuInflaterinflater=this.getMenuInflater();
-
inflater.inflate(R.menu.sub_menu,menu);
-
super.onCreateContextMenu(menu,v,menuInfo);
-
}
- }
运行模拟器,点击文本内容2s后:

分享到:
相关推荐
本文将深入探讨Android菜单的学习,包括如何创建、使用以及自定义菜单,帮助开发者提升用户体验。 首先,Android菜单主要有三种类型:选项菜单(Option Menu)、上下文菜单(Context Menu)和弹出式菜单(Popup ...
通过使用`AppCompatActivity`作为基类,开发者可以为他们的应用添加一个顶部导航栏,提供搜索、菜单和操作项等功能,这些在早期版本的Android中是无法直接使用的。 其次,`appcompat-v7`库还包含了对Material ...
•Android---UI篇---Tab Layout(选项卡布局) • •Andorid---UI篇---TableLayout(表格布局) • •Android---UI篇---RelativeLayout(相对布局) • •Android---UI篇---GridView...•Android---UI篇---Menu(菜单)
2. 主界面:Android Studio的主界面由多个部分组成,包括欢迎屏幕、项目结构视图(Project)、代码编辑器(Editor)、菜单栏、工具窗口和底部的面板(如终端、事件日志等)。 3. 功能特性: - 代码编辑:支持智能...
它是一个可滑动的侧边栏,常用于实现导航菜单或抽屉式界面。在Android设计规范中,DrawerLayout通常被用作主内容视图的附加视图,用户可以从中选择不同的操作或导航选项。它结合了`android.support.v4.widget....
安装完成后,当你打开一个布局文件时,可以在"Generate"菜单中看到" ButterKnife Bindings"选项。选择它,插件会自动检测布局文件中的所有视图,并为你生成对应的ButterKnife注解代码。 例如,如果你有一个XML布局...
使用这个库,开发者可以轻松地实现导航抽屉、选项菜单、工具栏等高级UI特性。 `Readme-说明.htm`文件通常包含了关于库的基本信息、安装指南、使用注意事项等内容。在实际应用中,开发者应该仔细阅读这份文档,以...
`android-support-v7-appcompat`库支持在ActionBar或ToolBar中显示菜单和选项项,同时提供了对Overflow Menu(更多选项)的支持,即使在没有硬件菜单键的设备上也能正常使用。 六、颜色选择器 库中还包括一个颜色...
2. **NavigationView**:这是一个侧滑菜单,通常与 DrawerLayout 结合使用,用于展示应用的主要导航选项。 3. **TabLayout**:用于创建可滑动的标签页,可以与ViewPager配合使用,提供多页内容浏览。 4. **...
安装结束后,会弹出一个菜单三个选项分别是运行 Android,创建一个虚拟 SD 卡,重启。 step 4:自定义虚拟机分辨率 在开发时肯定需要测试不同的分辨率,那么如何自定义 Android-x86 的分辨率?在 Android-x86 中...
[开源][安卓][炫酷菜单]Context-Menu.Android-master Git上的炫酷菜单源码
在Android应用开发中,底部导航菜单(Bottom Navigation Bar)是一种常见的设计模式,它提供了一种在多个主要功能间切换的便捷方式。这篇博客"Android--底部菜单栏实现"可能详细介绍了如何在Android项目中实现这样的...
在Android开发中,侧滑菜单(SlidingMenu)是一种常见的设计模式,用于提供一个可以从屏幕边缘滑出的隐藏菜单,增强了用户体验。这种菜单通常用于移动应用的导航,让用户能够轻松访问多个功能区域。本资源“安卓...
保存并关闭,然后通过`desktop-file-install ~/.local/share/applications/android-studio.desktop`命令将快捷方式安装到系统菜单。 2. **配置与环境变量**: - 配置Android SDK路径,确保Android Studio可以找到...
NavigationView在侧滑抽屉布局中显示导航菜单,包含层次结构的导航选项。 4. **TabLayout** TabLayout用于在应用中创建标签式界面,可以与ViewPager结合使用,实现滑动页面和标签同步。 5. **CoordinatorLayout*...
在Android开发中,菜单(Menu)是用户界面的重要组成部分,它为用户提供了一种访问...通过学习提供的资源文件,如`5.pdf`、`android 5-Menu.pptx`和`Example-4`,你可以更深入地了解Android菜单的实践细节和最佳实践。
5. 打包与发布:通过Build菜单生成签名的APK,上传至Google Play或其他应用市场。 总结,"android-sdk-windows"为Windows用户提供了一个完整的Android开发环境,涵盖了从项目创建、编码、调试到发布的整个流程。...
- 打开Eclipse,选择菜单栏的“File” -> “Import”。 - 在弹出的对话框中选择“Existing Android Code Into Workspace”,然后点击“Next”。 - 浏览并选择解压后的`android-pdfview-lib-for-eclipse-master`...
在Android应用开发中,滑动式菜单(通常称为侧滑菜单或者抽屉式菜单)是一种常见的界面设计元素,它提供了一种优雅的方式让用户在不离开当前屏幕的情况下访问其他功能或内容。`android-menudrawer-master`项目正是...