时间:2021-05-02
知识点:
这次将继续上一篇文章没有讲完的menu的学习,上下文菜单(context menu)和弹出菜单(popup menu)。
上下文菜单
上下文菜单提供对ui界面上的特定项或上下文框架的操作,就如同windows中右键菜单一样。
在android中,有两种提供上下文操作的方式:一种是在浮动的上下文菜单(长按弹出)中,另一种是上下文操作模式里。
那么怎样创建一个浮动的上下文菜单(floating context menu)呢?
1.调用registerforcontextmenu()方法为view注册上下文菜单。
2. 在activity或fragment中实现oncreatecontextmenu()方法。
3.实现oncontextitemselected()方法以响应用户长按菜单项的事件。
下面是一个上下文菜单的demo:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 private textview textview; final int red = 0x101; final int blue = 0x102; final int green = 0x103; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); textview=(textview)findviewbyid(r.id.textview); //给textview注册上下文菜单 registerforcontextmenu(textview); } //创建上下文菜单 @override public void oncreatecontextmenu(contextmenu menu, view v, contextmenuinfo menuinfo) { menu.add(0, red, 0, "red"); menu.add(0, blue, 0, "blue"); menu.add(0,green,0,"green"); menu.setheadertitle("set the color of the textview"); menu.setgroupcheckable(0, true, true); } //菜单项响应事件 @override public boolean oncontextitemselected(menuitem item) { switch (item.getitemid()) { case green: item.setchecked(true); textview.setbackgroundcolor(color.green); break; case blue: item.setchecked(true); textview.setbackgroundcolor(color.blue); break; case red: item.setchecked(true); textview.setbackgroundcolor(color.red); break; } return true; } 使用上下文操作模式
上下文操作模式是实现系统actionmode接口,关注用户的交互来实现上下文操作行为。当用户通过选择菜单项来触发这个模式,一个可供用户对刚选择的菜单项进行操作的上下文action bar出现在屏幕顶部。用户可选择多项(select multi items)、取消选择(deselect)、操作完成(done)、返回(back)等操作。
那么什么时候调用上下文操作模式呢?
在下面两种情况下调用:
1.用户对view执行长按(long-click)操作。
2.用户在view中选择了复选框(checkbox)或者类似的ui组件。
怎么启用上下文操作模式呢?
这也分两种情况:
1.针对独立的view
首先实现 actionmode.callback接口,然后调用startactionmode()方法。
2.针对listview或girdview(或其他abslistview的拓展)
实现 abslistview.multichoicemodelistener接口,调用setmultichoicemodelistener()方法,最后传入choice_mode_multiple_modal参数调用setchoicemode()方法。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 private listview listview; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); listview=(listview)findviewbyid(r.id.listview1); string arr[]={"new york","shanghai","los angle","beijing","paris","tykyo","moscow","berlin","hongkong"}; //将数组包装成arrayadapter arrayadapter<string> adapter1= new arrayadapter<string>(this,r.layout.array_item ,arr); listview.setadapter(adapter1); listview.setchoicemode(listview.choice_mode_multiple_modal); listview.setmultichoicemodelistener(new multichoicemodelistener() { @override public boolean onprepareactionmode(actionmode mode, menu menu) { // todo auto-generated method stub return false; } @override public void ondestroyactionmode(actionmode mode) { // todo auto-generated method stub } @override public boolean oncreateactionmode(actionmode mode, menu menu) { // todo auto-generated method stub menuinflater inflater = mode.getmenuinflater(); inflater.inflate(r.menu.contextmenu, menu); return true; } @override public boolean onactionitemclicked(actionmode mode, menuitem item) { switch (item.getitemid()) { case r.id.done: toast.maketext(mainactivity.this, "you have clicked the done", toast.length_long).show(); break; case r.id.cancel: toast.maketext(mainactivity.this, "you have clicked the cancel", toast.length_long).show(); default: break; } return true; } @override public void onitemcheckedstatechanged(actionmode mode, int position, long id, boolean checked) { // todo auto-generated method stub } }); }声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
今天看了proandroid3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享。PS:强烈推荐《ProAndroid
一般使用过UCWEB-Android版的人都应该对其特殊的menu有一定的印象,把menu做成Tab-Menu(支持分页的Menu),可以容纳比Android传
效果:一、html代码:menu1menu2menu3menu4menu5menu6111222333444666二、js代码$(".M_Button").cl
本文实例讲述了Android实现为Tab添加Menu的方法。分享给大家供大家参考,具体如下:在Android中,TabActivity类中没有与Menu有关的方
笔者正在自学Android开发,随着学习的进程的加深,我会写一些小白级别的案例,一是为了保存代码和笔记,二也是为了供同样热爱Android的小伙伴参考。这里写了