菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机都要有一个“menu”键,即菜单键,由此可见菜单在Android程序中的重要与特殊,其中Android的SDK提供了三种类型:分别为optionsmenu(常规菜单),contextmenu(上下文菜单)和submenu(子菜单)。其中optionsmenu是通过按Menu键来显示,contextmenu通过在view(视图控件上)按2秒之后才会显示,这两种菜单都可以嵌套子菜单,但是子菜单里不能嵌套子菜单。
Optionsmenu只能在屏幕最下面显示六个菜单选项,这六个菜单叫做iconmenu(图标菜单),图标菜单不能有checkable选项,多于6项的会以moreiconmenu菜单来调出,叫做expandedmenu(扩展菜单).optionsmenu(选项菜单)通过activity的onCreateOptionsMenu来生成,这个函数只会在Menu第一次生成时调用,任何想要改变optionsmenu的只能通过onPrepareOptionsMenu来实现,这个函数会在menu显示之前被调用。onOptionsItemSeleted用来处理选中的optionsmenu菜单项
ContextMenu是跟某个具体的view捆绑在一起的,在activity中用registerForContextMenu来为某个view注册上下文菜单。Contextmenu在显示之前会调用onCreateContextMenu来生成menu,onContextItemSeleted用来处理选中的contextmenu菜单。
Submenu是子菜单,可以嵌套在以上两种菜单中,但是子菜单不能嵌套子菜单
Android还提供了对菜单项进行分组的功能,可以把相似功能的菜单分在一组里面,这样就可以通过调用setGroupCheckable,setGroupEndable,setGroupVisible来设置属性菜单,而不用单独设置了。
1、下面是一个创建optionsmenu的例子:
首先在res里创建一个menu文件夹,里面可以创建许多menu的资源文件,方便管理。在这个文件夹里创建一个Android的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_title"/>
<item
android:id="@+id/ecit"
android:icon="@drawable/ic_launcher"
android:title="@string/exit_title"/>
</menu>
这里创建了两个菜单选项,每个item是一个菜单选项,其中的icon也可以不写;title里面的内容要在string文件里提前写上,这是菜单的标题;最后在Activity里面通过onCreateOptionsMenu方法创建这个菜单,然后通过onOptionsItemSelect方法来处理这个菜单。代码如下:
packagecn.csdn.android.menu;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.MenuInflater;
importandroid.view.MenuItem;
importandroid.view.MenuItem.OnMenuItemClickListener;
importandroid.widget.Toast;
publicclassMenuTest1ActivityextendsActivity
{
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
MenuInflaterinflater=getMenuInflater();
inflater.inflate(R.menu.options_menu,menu);
returntrue;
}
}
运行结果如下图所示:
在屏幕的下方可以看到这两个菜单。
2、在Activity中添加方法可以响应菜单的一些事件,通过上面的例子,在它的Activity中添加onOptionsItemSelected方法,可以是菜单完成它的功能,onOptionsItemSelected的代码如下:
publicbooleanonOptionsItemSelected(MenuItemitem){
switch(item.getItemId()){
caseR.id.newFile:
Toast.makeText(this,"newfile",Toast.LENGTH_LONG).show();
break;
caseR.id.ecit:
//Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
this.finish();
break;
}
添加此方法后点击“退出”按钮可以退出,点击“新建文件”出现名为“newfile”的对话框。
也可以用onMenuItemClick方法处理:代码如下
publicbooleanonMenuItemClick(MenuItemitem){
switch(item.getItemId()){
caseR.id.newFile:
Toast.makeText(this,"newfile",Toast.LENGTH_LONG).show();
break;
caseR.id.ecit:
//Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
this.finish();
break;
}
returnfalse;
功能和上一个方法一样,只是
3、创建子菜单,在xml文件中插入菜单,下面的例子是在第二个菜单里插入两个菜单:xml文件源码如下:
<?xmlversion="1.0"encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuitem1"
android:title="menuitem1"/>
<item
android:id="@+id/menuitem2"
android:title="menuitem2">
<menu>
<item
android:id="@+id/menuitem3"
android:title="menuitem3"/>
<item
android:id="@+id/menuitem4"
android:title="menuitem4">
</item>
</menu>
</item>
</menu>
4、带单选或复选的子菜单,在创建菜单时添加setGroupCheckable方法,来确定添加的是单选还是复选:
publicbooleanonCreateOptionsMenu(Menumenu){
getMenuInflater().inflate(R.menu.second_menu,menu);
SubMenusm=menu.findItem(R.id.item3).getSubMenu();
sm.setIcon(R.drawable.ic_launcher);
// sm.setGroupCheckable(0,true,true);
sm.getItem(0).setCheckable(true);
sm.getItem(0).setChecked(true);
this.menu=menu;
returnsuper.onCreateOptionsMenu(menu);
}
相关推荐
最新最实用的android菜单界面布局,不下会后悔的
Android 菜单筛选器
Android菜单、对话框使用实例源码,,基本使用
android中实现点击,下拉菜单栏功能
1、在android Activity中重写onCreateOptionsMenu(),onOptionsItemSeclected() 与onCreateContextMenu()与onContextItemSelected()来实现OptionsMenu 与ContextMenu菜单。 2、子菜单的使用
仿微信菜单导航及左右切换,仿支付宝菜单效果,代码简单实用
NULL 博文链接:https://zhouzhimeng.iteye.com/blog/1740706
比较精美的android菜单图标,跟UC菜单图标是一样的
自定义Android菜单背景 轻松实现漂亮的菜单
android 菜单栏 仿微信 自定义View初阶学习 记录下 方便以后再次使用
android菜单icon图标,涵盖了常见的icon图标。
Android菜单集合:FragmentTabHost系统菜单、上移式菜单、360波纹菜单、展开式菜单。详解注释,可直接拿来用!
Android 菜单(OptionMenu)大全 Pro Android 源码
Android 菜单(OptionMenu)大全 建立你自己的菜单
Android 实现三种菜单效果,扇形菜单、线性菜单、圆形转盘菜单
Android菜单渐渐呼出,相关的朋友可以根据自己的需要来搞这个Demo
android菜单栏选项卡的实现,结合activityGroup和tabhost,子activity同时重绘菜单栏。
Android菜单和主界面同时滑动效果源码项目介绍 1.视觉差侧滑菜单,即菜单和主界面都滑动,其实也比较常见。有开源项目SlidingMenu,但太复杂了,且在我使用过程中无法完美实现透明状态栏,中间会有一条分割线。看我...