1、当给Android3.0和更高的版本开发应用程序时,你应该改用上下文动作模式(contextual action mode)来确保被选内容的动作。这种模式把影响选择内容的动作项目显示在屏幕顶部的一个横条中,并允许用户选择多个项目。弹出菜单一个弹出菜单在一个垂直列表中显示项目的列表,它靠在调用这个菜单的View对象旁边。它对给相关指定内容提供动作的展现或给一个命令的第二部分提供选项是有好处的。弹出菜单中的动作不应该直接影响对应的内容,相反,弹出菜单是为了扩展Activity中相关内容区域的动作而设计的。在XML中定义一个菜单对于所有的菜单类型,Android提供了标准的XML格式来定义菜单项目。
2、你应该在一个XML菜单资源中定义一个菜单和它的所有的项目,而不是在你Activity代码中创建一个菜单。然后你就能够把菜单资源作为一个Menu对象加载到Activity或Fragment对象中。由于以下原因,使得使用菜单资源是一个好的实践选择:1. 更容易看清XML文件中的菜单结构;2. 它把针对菜单的内容和应用程序的行为代码给分离开了;3. 它允许你针对不同的平台版本、屏幕尺寸和其他的被应用资源框架利用的配置来创建可选的菜单配置。要定义菜单,就要在你的项目内部的res/menu/目录内部创建一个XML文件,并且要使用下列元素来构建菜单:定义一个菜单,它包含菜单项。元素必须是这个文件的根节点,
3、并且能够拥有多个和元素。创建一个MenuItem对象,它代表了一个菜单中的单独项目。为了创建一个子菜单,这个元素可以包含一个嵌套的一个可选的针对menu xmlns:android= +id/helpdrawable/ic_helpstring/help /menu元素支持以下几个用于定义菜单项的外观和行为的属性:android:id菜单项的唯一资源ID,在用户选择这个菜单项时,应用程序能够用这个ID来识别它。icon指向一个可描画的资源,用作这个菜单项的图标。title指向一个用作菜单标题的字符串。showAsAction指明这个菜单项作为操作栏(action bar)中的一个动作项应该显示
4、的时机和方式。以上只是你应该使用的最重要的属性,但是还有一些有效的属性。有关菜单支持的所有属性信息,请看“菜单资源”的文档。你能够给菜单中的任意一个项目(子菜单除外)添加一个子菜单,通过把元素作为!- file submenu -+id/create_newstring/create_new+id/openstring/open/item要在Activity中使用菜单,你需要使用MenuInflater.inflate()方法来加载菜单资源(把XML资源转换成可编程对象)。在下列章节中,你会看到每种类型菜单的创建方法。创建一个选项菜单选项菜单应该是包含动作和与当前Activity上下文环境相关
5、的其他选项,如:“搜索”、“编写电子邮件”、和“设置”等。选项菜单中项目在屏幕上显示的位置依赖与你的应用程序所依赖的Android平台版本:1. 如果你的应用程序依赖Android2.3.x(API 级别 10)或更低的版本,那么当用户按下Menu按钮时,你的选项菜单内容会显示在屏幕的底部,如图1所示:当菜单被打开时,首先看到的是图标菜单,它们被六个菜单项持有。如果你的菜单包含的菜单项目大于6,那么Adroid会放入第六个项目并把其余的项目放到溢出菜单中,用户能够同选择更多的菜单项来打开其余的菜单项。图1.Android2.3上的浏览器的可选菜单2. 如果你的应用程序依赖Android3.0(
6、API 级别 11)或更高的版本,可先菜单的项目在操作栏(action bar)中是有效的。默认情况下,系统会把所有的项目放到动作溢出中,用户能够在操作栏(action bar)的右边看到动作溢出图标(或者,如果Menu按钮有效,按下设备的Menu按钮也可以)。要让重要的动作快速访问,你能够通过在元素中添加android:showAsAction=”ifRoom”属性设置,把一些菜单项目放到操作栏中显示。注意:即使你的应用不依赖Android3.0或更高的版本,你也能够构建自己的操作栏(action bar)来模仿类似的效果。图2.Honeycomb Gallery应用程序的操作栏,显示了导航
7、标签和照相机动作项(被加在动作溢出按钮上)Honeycomb Gallery应用程序网址:你既可以给Activity子类,也可以给Fragment子类声明选项菜单项目。如果Activity和Fragment都声明了选项菜单项目,它们会在UI中组合到一起。Activity的选项菜单会首先显示,紧接着按照每个Fragmeng被添加的顺序来显示Fragment的选项菜单。如果需要,你能够在每个需要移动的元素中用android:orderInCategory属性来重新指定选项菜单的顺序。要给一个Activity指定选项菜单,需要重写onCreateOptionsMenu()方法(Fragment也提供
8、它们自己的onCreateOptionsMenu()方法)。在这个方法中,能够把菜单资源(在XML文件中定义)加载到这个回调方法提供的Menu对象中。如:Overridepublic boolean onCreateOptionsMenu(Menu menu) MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.game_menu, menu); return true;你也能够使用add()方法来添加菜单项,并且用findItem()方法获取要用MenuItem APIs修改属性的菜单项。如果你的应用程序依赖A
9、ndroid2.3.x或更低的版本,系统会在用户首次打开这个菜单时,调用onCreateOptionsMenu()方法来创建选项菜单。如果你的应用程序依赖Android3.0或更高的版本,系统会在启动Activity时调用onCreateOptionsMenu()方法,以便把选项菜单显示在操作栏(action bar)中。处理click事件当用户选择了选项菜单中的一个菜单项(包括操作栏(action bar)中动作),系统会调用Activity的onOptionsItemSelected()方法。这个方法把选择的菜单项作为参数来传递。你能够通过调用getItemId()方法来识别菜单项,这个方法返回了对象菜单项的唯一ID(这个ID是在菜单资源的android:id属性中定义的,或者是传递给add方法的一个整数)。你能够把这个ID与已知的菜单项匹配,让它执行对应的动作,如:public boolean onOptionsItemSelected(MenuItem item) / Handle item selection switch (item.getItemId() case R.id.new_game: newGame(); case R.id.help: showHelp(); default: return super.onO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1