内容正文:
第3章 常见的UI组件介绍
菜单
对话框的使用
ProgressBar及其子类
了解常用的UI组件
掌握PaogressBar及其子类的使用
掌握菜单的使用
掌握对话框的使用
学 习 目 标
LEARNING OBJECTIVES
初心至善 匠心育人
3.1 菜单
3.1.1
选项菜单
3.1.2
上下文菜单
3.1.3
弹出式菜单
3.1.4
设置与菜单项关联的Activity
目录
Contents
初心至善 匠心育人
3.1 菜单
Android中的菜单(menu)在桌面应用中十分广泛,几乎所有的桌面应用都会使用到。Android应用中的菜单分为三种:选项菜单( OptionMenu )、上下文菜单( ContextMenu )、弹出式菜单( PopupMenu ),本节依次介绍这些内容。
初心至善 匠心育人
3.1.1 选项菜单
从Android3.1开始引入了全新的操作栏,扩展了很多功能,例如安置菜单选项、配置应用图标作为导航按钮等。
可显示在操作栏上的菜单称为选项菜单(OptionMenu)。选项菜单提供了一些选项,用户选择后可进行相应的操作。
一般为Android应用添加选项菜单的步骤如下:
(1)重写Activity的onCreateOptionsMenu(Menu menu)方法,在该方法里调用Menu对象的方法添加菜单项。
(2)如果想要引用程序响应菜单项的单击事件,就要继续重写Activity的onOptionsItemSelected(MenuItem mi)方法。
3.1 菜单
初心至善 匠心育人
3.1.1 选项菜单
添加菜单项的方式与UI组件的使用方式一样,可以在代码中使用也可以在XML布局文件中使用。Android同样推荐在XML中使用菜单,具体为在app\src\main\res文件夹中创建名称为menu的文件夹,创建完成之后在menu文件夹中新建根标签为menu的布局文件,来看具体的示例代码:
XML文件中的选项菜单options_menu.xml
3.1 菜单
初心至善 匠心育人
3.1.1 选项菜单
菜单定义完成之后需要在代码中使用才可以看到效果,Java代码如下:
3.1 菜单
初心至善 匠心育人
3.1.1 选项菜单
上面代码中第8行和第13行,包含显示菜单和响应菜单单击事件的两个方法。实现简单的选项菜单。
一个简单的选项菜单示例就完成了。下面来分析Menu的组成结构。
Menu接口是一个父接口,该接口下实现了两个子接口。
SubMenu:代表一个子菜单,可包含1~N个MenuItem(形成菜单项)。
ContextMenu:代表一个上下文菜单,可包含1~N个MenuItem(形成菜单项)。
Menu接口定义了add()方法用于添加菜单项,addSubMenu()方法用于添加子菜单项。只不过有好几个重载方法可供选择,使用时可根据需求选择。SubMenu继承自Menu,它额外提供了setHeaderIcon、setHeaderTitle、setHeaderView方法,分别用于设置菜单头的图标、标题以及设置菜单头。
3.1 菜单
初心至善 匠心育人
3.1.2 上下文菜单
3.1.1节讲到,ContextMenu继承自Menu,开发上下文菜单(ContextMenu)与开发选项菜单基本类似,区别在于:开发上下文菜单是重写onCreateContextMenu(ContextMenu menu, View source, ContextMenu.ContextMenuInfo menuInfo)方法,其中source参数代表触发上下文菜单的组件。
开发上下文菜单的步骤如下:
(1)重写Activity的onCreateContextMenu(…)方法.
(2)调用Activity的registerForContextMenu(View view)方法为view注册上下文菜单.
3.1 菜单
初心至善 匠心育人
3.1.2 上下文菜单
(3)如果想实现点击事件,需要重写onContextItemSelected(MenuItem mi)方法
与3.1.1节提到的SubMenu子菜单相似,ContextMenu也提供了setHeaderIcon与setHeaderTitle方法为ContextMenu设置图标和标题。
3.1 菜单
初心至善 匠心育人
3.1.3 弹出式菜单
默认情况下,弹出式菜单( PopupMenu )会在指定组件的上方或下方弹出。PopupMenu可增加多个菜单项,并可为菜单项增加子菜单。
使用PopupMenu的步骤与前两种Menu不同,具体步骤如下。
(1)调用new PopupMenu(Context context, View anchor)创建下拉菜单,a