博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的上下文菜单Context Menu
阅读量:6496 次
发布时间:2019-06-24

本文共 3063 字,大约阅读时间需要 10 分钟。

hot3.png

ContextMenu简介

在Windows中,我们已经习惯了在文件上单击右键来执行“打开”、“重名名”、“剪切”、“删除”等操作,这个右键弹出的菜单就是上下文菜单。你可能 会笑道:“哈哈,你不会连快捷键都不会用吧?”。咳咳,这个。。。举个例子嘛。没错,windows中快捷键能帮助我们提高操作的效率,但是android中这招可不管用喽,注意:android的上下文菜单项是不能用快捷键的。因为手机的操作方式与使用鼠标的PC操作方式不同,android是通过长按某个视图元素来弹出上下文菜单的(PS:现在大多数智能机是全触屏的,没有物理键盘,更没有使用快捷键的需要了,这项革新要归功于乔布斯在07发布的革命手机iPhone,老乔退休了,向他致敬!)。除此之外,甚至连图标和子菜单都无法用在Android的上下文菜单项中。那么,Android的上下文菜单到底如何使用?

上下文菜单继承了,因此我们可以像操作Options Menu那样给上下文菜单增加菜单项。上下文菜单与Options Menu最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过( view)来指定

尽管上下文菜单的拥有者是View,生成上下文菜单却是通过Activity中的( menu, v, menuInfo)方法,该方法很像生成Options Menu的( menu)方法。两者的不同在于,只在用户第一次按“Menu”键时被调用,而会在用户每一次长按View时被调用,而且View必须已经注册了上下文菜单。

另一个值得注意的就是上图中的ContextMenuInfo,该类的对象被传入( menu, v, menuInfo)方法,那么它有什么用呢?有时候,视图元素需要向上下文菜单传递一些信息,比如该View对应DB记录的ID等,这就要使用ContextMenuInfo。需要传递额外信息的View需要重写()方法,返回一个带有数据的ContextMenuInfo实现类对象。

介绍了这么多,下面给出一个demo演示如何创建和响应上下文菜单:

1.在activity的onCreate(...)方法中为一个view注册上下文菜单

2.在onCreateContextMenuInfo(...)中生成上下文菜单。

3.在onContextItemSelected(...)中响应上下文菜单项。

Demo:使用上下文菜单

1)注册上下文菜单

/** * 上下文菜单演示Demo *  * @author CodingMyWorld 2011-8-27 下午03:22:39 */publicclass SampleContextMenuActivity extends ListActivity {    privatestaticfinal String TAG ="SampleContextMenuActivity";    @Override    protectedvoid onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 显示列表        simpleShowList();        // 为所有列表项注册上下文菜单this.registerForContextMenu(getListView());    }    privatevoid simpleShowList() {        // list item        String[] files =new String[] {            "文件1",            "文件2",            "文件3",            "文件4"        };        // simple array adapter        ArrayAdapter
 adapter =new ArrayAdapter
(                this,                 android.R.layout.simple_list_item_1,                files);        // set adapterthis.setListAdapter(adapter);        Log.v(TAG, "show simple list");    }}

2)生成上下文菜单

在activity中重写方法。

@Overridepublicvoid onCreateContextMenu(ContextMenu menu, View v,        ContextMenuInfo menuInfo) {    Log.v(TAG, "populate context menu");    // set context menu title    menu.setHeaderTitle("文件操作");    // add context menu item    menu.add(0, 1, Menu.NONE, "发送");    menu.add(0, 2, Menu.NONE, "标记为重要");    menu.add(0, 3, Menu.NONE, "重命名");    menu.add(0, 4, Menu.NONE, "删除");}

3)响应上下文菜单项

与响应options menu类似,唯一的不同是可以通过menu info获得额外的信息。

@Overridepublicboolean onContextItemSelected(MenuItem item) {    // 得到当前被选中的item信息    AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();    Log.v(TAG, "context item seleted ID="+ menuInfo.id);        switch(item.getItemId()) {    case1:        // do somethingbreak;    case2:        // do somethingbreak;    case3:        // do somethingbreak;    case4:        // do somethingbreak;    default:        returnsuper.onContextItemSelected(item);    }    returntrue;}

运行程序,多次唤出上下文菜单,注意LogCat的输出,每一次都被调用了。

转载于:https://my.oschina.net/u/1446273/blog/199780

你可能感兴趣的文章
BIZTALK项目中WEB引用WEBSERVICES服务时候报错
查看>>
我常用的那些linux命令
查看>>
QT 5.4.1 for Android Ubuntu QtWebView Demo
查看>>
友盟自动更新
查看>>
OSD的主要实现方法和类型(转)
查看>>
JComboBox
查看>>
【转】Android下编译jni库的二种方法(含示例) -- 不错
查看>>
DoubleViewPager
查看>>
Android上成功实现了蓝牙的一些Profile
查看>>
基于jQuery图片自适应排列显示代码
查看>>
NEURAL NETWORKS, PART 1: BACKGROUND
查看>>
jquery对同级的td做radio限制
查看>>
Delphi XE5 常用功具与下载
查看>>
存储过程由结构表生成表
查看>>
C# 批处理制作静默安装程序包
查看>>
柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)...
查看>>
2015 Multi-University Training Contest 2 1002 Buildings
查看>>
java 产生的固体物的基础上 增删改的SQL声明
查看>>
在自己的网站添加关注新浪关注按钮
查看>>
【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
查看>>