当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 从官方文档了解到,从Android3.0(API level 11)开始,Android设备不再要求提供一个专门的菜单按钮,转而推荐使用ActionBar。所以现在市面上很多新设备使用三个虚拟按键,

 从官方文档了解到,从Android3.0(API level 11)开始,Android设备不再要求提供一个专门的菜单按钮,转而推荐使用ActionBar。所以现在市面上很多新设备使用三个虚拟按键,并不再额外提供菜单按钮。

因为Android版本的发展,对于菜单的支持各个版本有很大的区别,而Android3.0是个分水岭,大概可以分为下面三类:

OptionMenu和ActionBar:一些操作的集合,如果开发的平台在Android3.0之上,推荐使用ActionBar,如果开发的平台在Android2.3或之下,还是可以使用OptionMenu的。

ContextMenu和ActionMode:ContextMenu是一个浮动的窗口形式展现一个选项列表,ActionMode是一个显示在屏幕顶部的操作栏,允许用户选择多个选项,ActionMode在Android3.0之后才有支持。

Popup Menu:PopupMenu是固定在View上的模态菜单,以弹出的方式显示,在Android3.0之后才有支持。

【在XML中定义一个菜单】

Android提供了标准的XML格式的资源文件来定义菜单项,并且对所有菜单类型都支持,推荐使用XML资源文件来定义菜单,之后再把它Inflater到Activity或者Fragment中,而不是在Activity中使用代码声明。

而菜单的XML资源文件,需要创建在/res/menu/目录下,并且包含一下几个元素:

 

:定义一个Menu,是一个菜单资源文件的根节点,里面可以包含一个或者多个元素。

 

:创建一个MenuItem,代表了菜单中一个选项。

:对菜单项进行分组,可以以组的形式操作菜单项。

元素除了常规的id、icon、title属性的支持,还有一个重要的属性:android:showAsAction,这个属性是起兼容性的,描述了在Android的高版本中,菜单项何时以何种方式加入到ActionBar中。

是对菜单进行分组,分组后的菜单显示效果并没有区别,唯一的区别在于可以针对菜单组进行操作,这样对于分类的菜单项,操作起来更方便,提供如下的操作:

Menu.setGroupCheckable():菜单组内的菜单是否都可选。

Menu.setGroupVisible():是否隐藏菜单组的所有菜单。

Menu.setGroupEnabled():菜单组的菜单是否有用。

如果菜单项需要单选或者多选,可以使用android:checkableBehavior属性设置,它可以对单个或者设置一个组,这个属性接受三个参数:single,单选;all,多选,none,没有Checked的选项,默认。

当创建好一个XML菜单资源文件之后,可以使用MenuInflater.inflate()方法填充菜单资源,使XML资源变成一个可编程的对象。

一、Options menu选项菜单:

OptionMenu,选项菜单,单击手机上的菜单键(MENU)出现,必须设备具有菜单按钮才可以触发。因为屏幕的限制,最多只能展示六个菜单项,如果定义的菜单项超出了六个,其他的菜单项将被隐藏,第六个菜单将会显示“更多”,点击展开更多的菜单。虽说在Android3.0之后不再推荐使用选项菜单,但是如果使用了,在Android3.0之后的设备上,选项菜单项将被默认转移到ActionBar中,这个可以通过android:showAsAction属性控制。

创建选项菜单的核心步骤:

(1)重写Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被加载时调用

(2)调用Menu 的add( )方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon()方法为菜单项设置图标(注:Android 3.0之后,即使添加了图标也不会显示)

(3)重写Activity的OptionsItemSelected(MenuItem item)来响应菜单项(MenuItem)的点击事件

来看一下具体的代码实现:

新建Android工程MenuTest:

【方式一】通过配置文件添加Menu选项

(1)在res/menu/main.xml中定义菜单项。main.xml的代码如下:

复制代码

 

xmlns:tools="http://schemas.android.com/tools"

tools:context="com.example.menutest.MainActivity" >

 

android:id="@+id/start"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/start"/>

 

android:id="@+id/over"

android:orderInCategory="200"

android:showAsAction="never"

android:title="@string/over"/>

 

 

复制代码

注:第9行和第15行的字符串引用,需要提前在strings.xml文件中设置好。

(2)MainActivity.java:

复制代码

1 package com.example.menutest;

2

3 import android.app.Activity;

4 import android.os.Bundle;

5 import android.view.Menu;

6 import android.view.MenuItem;

7 import android.widget.Toast;

8

9

10 public class MainActivity extends Activity {

11

12 @Override

13 protected void onCreate(Bundle savedInstanceState) {

14 super.onCreate(savedInstanceState);

15 setContentView(R.layout.activity_main);

16 }

17

18

19 //重写onCreateOptionMenu(Menu menu)方法,当菜单第一次被加载时调用

20 @Override

21 public boolean onCreateOptionsMenu(Menu menu) {

22 // Inflate the menu; this adds items to the action bar if it is present.

23 //填充选项菜单(读取XML文件、解析、加载到Menu组件上)

24 getMenuInflater().inflate(R.menu.main, menu);

25 return true;

26 }

27

28 //重写OptionsItemSelected(MenuItem item)来响应菜单项(MenuItem)的点击事件(根据id来区分是哪个item)[!--empirenews.page--]

29 @Override

30 public boolean onOptionsItemSelected(MenuItem item) {

31 // Handle action bar item clicks here. The action bar will

32 // automatically handle clicks on the Home/Up button, so long

33 // as you specify a parent activity in AndroidManifest.xml.

34 switch (item.getItemId()) {

35 case R.id.start:

36 Toast.makeText(this, "开始游戏", Toast.LENGTH_SHORT).show();

37 break;

38 case R.id.over:

39 Toast.makeText(this, "结束游戏", Toast.LENGTH_SHORT).show();

40 break;

41

42 default:

43 break;

44 }

45 return super.onOptionsItemSelected(item);

46 }

47 }

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

微电子产品的可靠性是评价其质量的关键指标。在微电子组装过程中,由于元器件的微小化和集成度的提高,对组装精度的要求也越来越高。因此,确保组装过程中的可靠性,对于提升产品的整体质量和客户满意度至关重要。

关键字: 微组装 组件

其他电脑(比如安卓手机/平板电脑)的屏幕坏了,你可能想在安排维修之前紧急访问一些东西。你可以使用android的USB OTG功能(是的,几乎每个android都支持这个功能,你可以将鼠标和键盘连接到它)。

关键字: USB 鼠标 Android 树莓派

-Vehere宣布推出v1.8.1,为安全分析师提供更精准的检测、更快的响应和更智能的工作流程 旧金山2025年7月18日 /美通社/ -- 领先的人工智能驱动型网络情报提...

关键字: 网络 UI MT BSP

上海 2025年6月11日 /美通社/ -- 6月11日,国电投新能源科技有限公司(以下简称"国电投新能源")携铜栅线异质结(C-HJT)光伏组件亮相2025年SNEC国际太阳能光伏展。随着&quo...

关键字: 光伏产业 新能源 组件 光伏组件

常州 2025年5月21日 /美通社/ -- 在近期的光伏行业会议上,天合光能支架事业部联席总裁王芝斌发表题为《电力市场化交易环境下电站设备选型》的主题演讲。演讲中王芝斌不仅深入探讨了在136号文新形势下跟踪支架在提升...

关键字: 光伏 组件 电力市场 选型

Google 宣布与中国 AR 科技公司 XREAL 达成深度战略合作,联合推出全球首款专为 Android XR 平台打造的旗舰级 AR 眼镜 Project Aura。

关键字: Google XREAL Android XR眼镜 AR

青岛 2025年4月30日 /美通社/ -- 4月25日,在山东省市场监督管理局的指导下,国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(简称"...

关键字: 新能源 研讨会 组件 太阳能光伏

在当今这个信息化、智能化的时代,无线通信技术已经渗透到我们生活的方方面面。从智能家居、工业自动化到远程监控、医疗健康,无线射频模块作为无线通信的核心组件,其性能与稳定性直接关系到整个系统的运行效果。本文将为大家推荐几款高...

关键字: 无线通信 组件 芯片

继停止维护AOSP开源项目后,谷歌母公司Alphabet近日被曝在其安卓系统(Android)、Pixel手机以及Chrome浏览器等部门裁员数百人。这一举措引发了业界的广泛关注,也引发了对谷歌未来业务布局的诸多猜测。

关键字: 谷歌 AOSP Android 裁员
关闭