Android Studio中上下文菜单的使用

Posted 棉猴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio中上下文菜单的使用相关的知识,希望对你有一定的参考价值。

上下文菜单指的是根据点击的位置来判断弹出什么样的菜单,例如在android Studio的文件夹上长按弹出的菜单(图1)与某个app图标上长按弹出的菜单(图2)不同。

 图1 文件夹上长按弹出的菜单

 图2 app图标上长按弹出的菜单

使用上下文菜单主要分为三个步骤,第一步是创建上下文菜单;第二步是注册上下文菜单;第三步是为上下文菜单创建响应。

1 创建上下文菜单

创建上下文菜单分为两个步骤,一是通过XML文件创建菜单,二是将XML实例化为Menu类的对象。

1.1通过XML文件创建菜单

通过XML文件创建菜单的方法与《Android Studio中选项菜单的使用方法2-1》中提到的方法相同,XML文件的内容如图3所示。

图3 上下文菜单的XML文件内容

从图3中可以看出,创建的上下文菜单包含了“复制”、“粘贴”和“剪切”三项。

1.2 将XML实例化为Menu类的对象

要将XML实例化为Menu类的对象,则需要重写MainActivity类的onCreateContextMenu()方法,如图4所示。

 图4 重写的onCreateContextMenu()方法

当显示MainActivity上的某个视图的上下文菜单时就会调用onCreateContextMenu()方法。该方法有三个参数(图4①)。其中,第一个参数是与视图关联的上下文菜单;第二个参数是与上下文菜单的视图,即长按哪个视图会显示该上下文菜单;第三个参数是ContextMenuInfo类的对象,包含了上下文菜单的一些信息。

在重写的onCreateContextMenu()方法内部,首先调用其父类的onCreateContextMenu()方法(图4②),以便载入默认的上下文菜单。因为需要通过MenuInflater类才能将XML文件转换为Menu类的对象,因此,首先通过getMenuInflater()方法获取本程序的MenuInflater,并将其保存在mi中(图4③)。最后,通过mi调用MenuInflater类的方法inflate()将XML文件转换为Menu类(图4④),inflate()方法的第一个参数是要转换的XML文件,第二个参数是转换后的Menu类对象。其中,R.menu.longclick是“通过XML文件创建菜单”中创建的XML文件资源,menu是onCreateContextMenu()方法的第一个参数。

2 注册上下文菜单

在MainActivity的onCreate()方法中,注册上下文菜单,即将视图与上下文菜单关联起来,当长按该视图后,会显示创建的上下文菜单,如图5所示。

图5 注册上下文菜单

 其中,et1是EditText类的对象,通过图5①将et1与MainActivity活动中的EditText输入框视图关联,R.id.activity_et1是该视图的ID。之后,通过registerForContextMenu()方法,为指定的视图注册上下文菜单,即将视图与上下文菜单关联(图5②)。

3 为上下文菜单创建响应

重写MainActivity类的onContextItemSelected()方法为上下文菜单创建响应,如图6所示。当上下文菜单中某项被选中后,就会调用该方法。

 图6 onContextItemSelected()方法

其中,onContextItemSelected()方法的参数是MenuItem接口的对象item。MenuItem接口可以用来访问上下文菜单的菜单项。在onContextItemSelected()方法内部通过item调用MenuItem接口的getItemId()获取被选中的菜单项的ID,之后通过switch.case语句对不同的菜单项进行不同的响应。默认情况下调用MainActivity父类的onContextItemSelected()方法。

以上是关于Android Studio中上下文菜单的使用的主要内容,如果未能解决你的问题,请参考以下文章

jsp中上下文对象是什么?

Android 上下文菜单(Context Menu)

不理解 Java EE 中上下文的概念

Android Studio 中的 Webview 确实显示了导航菜单和背景徽标

带有列表子项可聚焦android的列表视图上下文菜单

Android - ListView 投掷手势触发上下文菜单