菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口 Android系统支持三种菜单
Options Menu(选项菜单)
Android3.0版本以前的显示效果如左图所示(需要单击Menu键弹出菜单) Android3.0版本以后的显示效果如右图所示(需要单击标题栏的…)
Android应用程序中使用选项菜单,需要重写Activity中的两个方法: public boolean onCreateOptionsMenu(Menu menu):调用OptionMenu,在该方法中完成菜单初始化; public boolean onOptionsltemSelected(Menultem item):菜单项被选中时触发,在该方法中完成事件处理。
Android中菜单项的生成有两种方式: 编写菜单项XML文件,并通过在onCreate OptionsMenu()函数中调用getMenulnflater().inflate()函数来生成一个菜单。使用该方式可以将菜单内容和代码进行分离,有利于后续菜单的调整,但是这种方式在菜单中为选项添加图标比较困难。 在Java代码中编写菜单生成代码,这种方式虽然在菜单的生成方式上较前一种稍显复杂,但是可以生成形式更为丰富的菜单项。 Context Menu(上下文菜单) Context Menu(上下文菜单)类似于Windows中的右键快捷菜单,但两者的区别在于Android中是用长按来显示一个ContextMenu的。 Android提供了Java代码和标准的XML菜单文件两种方式来定义菜单及菜单项。 如果要在Android的应用程序中使用ContextMenu(上下文菜单),就需要使用以下步骤实现。
重写onCreateContextMenu()方法
通过重写每个Activity类中的onCreateContextMenu()方法来加载菜单,该方法的原型如下:
第一个参数menu为要加载的上下文菜单。 第二个参数v为与菜单相关的组件。 第三个参数menulnfo是菜单的附加信息。 当用户单击某个组件时,该组件会把自己传递到第二个参数中,此时就可以通过View对象中的getld()函数来得到用户单击组件的ID,从而创建不同的上下文菜单。
加载菜单的方式
方法一:XML菜单文件 首先,在res/menu文件夹下创建XML菜单资源文件,并定义菜单项。如果没有menu文件夹,就需要开发者创建。 menu>:用来定义菜单,包含菜单项。必须有一个menu>作为XML的根元素,其中可包含一个或多个item>和group>元素。 item>:定义菜单项,每个item>都表示一个菜单项,还可以内嵌menu>元素,用来创建子菜单。 group>:此元素是可选的、不可见的,用来对菜单项进行分类,使他们可以共享相同的属性。
item>元素常用的属性
id : 表示菜单项的唯一资源ID,用来识别菜单项 icon: 表示菜单项的显示图标,可以指定一个图片资源。 title:表示菜单项的显示标题,可以指定字符串资源。
其次,在onCreateContextMenu()方法中使用getMenulnflater.inflate()方法填充菜单资源,即将XML菜单资源转换成一个可编程的对象。其代码如下:
方法二:java代码
通过代码动态添加菜单项可以直接使用onCreateOptionsMenu()方法的menu参数,并调用add()方法添加菜单项。即: menu.add(菜单项组号,菜单项ID,菜单项排序号,菜单项标题) 其中菜单项的排序号如果是按照菜单项的添加顺序排序,该参数的值可以都为0。 直接在onCreateContextMenu()方法中用Java代码实现,实现代码如下: 直接在onCreateContextMenu()方法中用Java代码实现,实现代码如下:
Context Menu(上下文菜单)
重写onCreateContextMenu()方法 为View组件注册ContextMenu
TextView tvinfo=(TextView)this.findViewByld(R.id.tvinfo); this.registerForContextMenu(tvinfo);
重写onContextltemSelected()方法 ContextMenu菜单建成后,需要给ContextMenu指定监听器为每个菜单项添加执行功能,即重写onContextltemSelected()方法, 操作过程见视频资源 欢迎大家加我微信交流讨论(请备注csdn上添加)
|