Android学习笔记——Menu(二)

  • 知识点:

           这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)。

  •    上下文菜单

              上下文菜单提供对UI界面上的特定项或上下文框架的操作,就如同Windows中右键菜单一样。

              在Android中,有两种提供上下文操作的方式:一种是在浮动的上下文菜单(长按弹出)中,另一种是上下文操作模式里。

             

              那么怎样创建一个浮动的上下文菜单(floating context menu)呢?

               1.调用registerForContextMenu()方法为View注册上下文菜单。

               2. 在Activity或Fragment中实现onCreateContextMenu()方法。

               3.实现onContextItemSelected()方法以响应用户长按菜单项的事件。

               下面是一个上下文菜单的demo:

              

 1     private TextView textView;
 2     final int RED = 0x101;
 3     final int BLUE = 0x102;
 4     final int GREEN = 0x103;
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         
10         textView=(TextView)findViewById(R.id.textView);
11         //给textView注册上下文菜单
12         registerForContextMenu(textView);
13     }
14 //创建上下文菜单
15     @Override
16     public void onCreateContextMenu(ContextMenu menu, View v,
17             ContextMenuInfo menuInfo) {
18         menu.add(0, RED, 0, "Red");
19         menu.add(0, BLUE, 0, "Blue");
20         menu.add(0,GREEN,0,"Green");
21         menu.setHeaderTitle("Set the color of the textView");
22         menu.setGroupCheckable(0, true, true);
23     }
24     //菜单项响应事件
25     @Override
26     public boolean onContextItemSelected(MenuItem item) {
27           switch (item.getItemId()) {
28         case GREEN:
29             item.setChecked(true);
30             textView.setBackgroundColor(Color.GREEN);
31             break;
32         case BLUE:
33             item.setChecked(true);
34             textView.setBackgroundColor(Color.BLUE);
35             break;
36         case RED:
37             item.setChecked(true);
38             textView.setBackgroundColor(Color.RED);
39             break;
40         }
41          return true;
42     }

    

  • 使用上下文操作模式

         上下文操作模式是实现系统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     private ListView listView;
 2     @Override
 3     protected void onCreate(Bundle savedInstanceState) {
 4         super.onCreate(savedInstanceState);
 5         setContentView(R.layout.activity_main);
 6         
 7         listView=(ListView)findViewById(R.id.listview1);
 8         String arr[]={"New York","Shanghai","Los Angle","BeiJing","Paris","Tykyo","Moscow","Berlin","HongKong"};
 9         //将数组包装成ArrayAdapter
10         ArrayAdapter<String> adapter1= new ArrayAdapter<String>(this,R.layout.array_item ,arr);
11         listView.setAdapter(adapter1);
12         
13         listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
14         listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
15             
16             @Override
17             public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
18                 // TODO Auto-generated method stub
19                 return false;
20             }
21             
22             @Override
23             public void onDestroyActionMode(ActionMode mode) {
24                 // TODO Auto-generated method stub
25                 
26             }
27             
28             @Override
29             public boolean onCreateActionMode(ActionMode mode, Menu menu) {
30                 // TODO Auto-generated method stub
31                     MenuInflater inflater = mode.getMenuInflater();
32                     inflater.inflate(R.menu.contextmenu, menu);
33                     return true;
34             }
35             
36             @Override
37             public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
38                switch (item.getItemId()) {
39             case R.id.done:
40                 Toast.makeText(MainActivity.this, "You have clicked the DONE", Toast.LENGTH_LONG).show();
41                 break;
42             case R.id.cancel:
43                 Toast.makeText(MainActivity.this, "You have clicked the CANCEL", Toast.LENGTH_LONG).show();
44             default:
45                 break;
46             }    
47                 return true;
48             }
49             
50             @Override
51             public void onItemCheckedStateChanged(ActionMode mode, int position,
52                     long id, boolean checked) {
53                 // TODO Auto-generated method stub
54                 
55             }
56         });
57     }
View Code

          

转载于:https://www.cnblogs.com/JohnTsai/p/3971833.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse卡慢解决办法

1.设置JVM运行内存 1.1编辑eclipse.ini 1.2 编辑eclipse.ini,设置jvm运行内存参数&#xff0c;最小内存&#xff1a;物理内存*0.2&#xff0c; 最大内存&#xff1a; 物理内存*0.6&#xff1b; 其中-vmargs为必须添加参数&#xff08;-vmargs的意思是设置JVM参数&#xff09;,…

QQ游戏百万人同时在线服务器架构实现

转载自&#xff1a;http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口&#xff0c;向着更为远大的目标迈进&#xff0c;这让其它众多传统的棋牌休闲游戏平台黯然失色&#xff0c;相比之下&#xff0c;联众…

ruby和python_Ruby,Python和Java中的Web服务

ruby和python今天&#xff0c;我不得不准备一些示例来说明Web服务是可互操作的。 因此&#xff0c;我已经使用Metro使用Java创建了一个简单的Web服务&#xff0c;并在Tomcat上启动了它。 然后尝试使用Python和Ruby消耗它们。 这是全部完成的过程… Java中的Web服务 我从Java中…

USB描述符【整理】

USB描述符 USB描述符信息存储在USB设备中&#xff0c;在枚举过程中&#xff0c;USB主机会向USB设备发送GetDescriptor请求&#xff0c;USB设备在收到这个请求之后&#xff0c;会将USB描述符信息返回给USB主机&#xff0c;USB主机分析返回来的数据&#xff0c;判断出该设备是哪一…

什么是垃圾回收?

以下是我们的垃圾收集手册中的一个示例&#xff0c;该手册将在接下来的几周内发布。 同时&#xff0c;花点时间熟悉垃圾收集的基础知识-这将是本书的第一章。 乍一看&#xff0c;垃圾收集应该处理顾名思义的问题-查找并丢弃垃圾。 实际上&#xff0c;它所做的恰恰相反。 垃圾收…

Extjs弹窗-简单文本编辑框-Ext.Msg.show

var datavalue测试202109;//文本传入数据 Ext.Msg.show({ title:标题, msg:说明, width:600, height:500, prompt:true, multiline:200, closable:true, …

word模板插入文本域并调整表格某一个行的列宽度

一、插入文本域 操作步骤&#xff1a;插入&#xff08;菜单&#xff09;->文档部件&#xff08;菜单&#xff09;->域&#xff08;菜单&#xff09;->邮件合并->输入名称->确认 二、调整word表格某个单元格宽度 选中某行&#xff0c;按住ctrl键的同时&#xf…

java泛型视频教程_Java泛型快速教程

java泛型视频教程泛型是Java SE 5.0引入的一种Java功能&#xff0c;在其发布几年后&#xff0c;我发誓那里的每个Java程序员不仅会听说过&#xff0c;而且已经使用过。 关于Java泛型&#xff0c;有很多免费和商业资源&#xff0c;而我使用的最佳资源是&#xff1a; Java教程 …

Windows上的Oracle Java

我最近为基于Windows 7的笔记本电脑下载了JDK 9的早期访问版本 &#xff08;内部版本68 &#xff09;。 由于这是早期版本&#xff0c;因此当自动安装在笔记本电脑上安装主要Java Runtime Environment&#xff08;JRE&#xff09;引入了一些不太理想的问题时&#xff0c;我并不…

extjs弹出窗口查看文本内容-new Ext.Window

代码样例&#xff1a; function processscan(){ var text时间 用户 操作<br> 时间 用户 操作<br> 时间 用户 操作; var win new Ext.Window({ layout: fit, width: 700, height: 600, closeAction: hide, dra…

Ioc Autofac心得

对于这个容器注入&#xff0c;个人也不是很熟悉&#xff0c;很多还不懂&#xff0c;只会基本的操作&#xff0c;几天把它记录下来&#xff0c;说不定以后帮助就大了呢&#xff0c;这方面跟安卓差距还是挺大的 下面记录下应用的流程 步骤&#xff1a; 1.添加应用 2.重写工厂&…

深入学习Web Service系列----异步开发模式

概述 在本篇随笔中&#xff0c;通过一些简单的示例来说一下Web Service中的异步调用模式。调用Web Service方法有两种方式&#xff0c;同步调用和异步调用。同步调用是程序继续执行前等候调用的完成&#xff0c;而异步调用在后台继续时&#xff0c;程序也继续执行&#xff0c;不…

navicate导出导入表数据问题

1.导出导入json&#xff0c;如下图&#xff0c;右击表点击导出向导&#xff0c;选择json导出类型&#xff0c;根据提示导出即可。 导入时&#xff0c;右击接收的表&#xff0c;点击导入向导&#xff0c;根据提示即可快速导入&#xff08;注&#xff1a;不同系统之间导出导入易…

tongweb通过控制台简单设置确认相关常用参数

1.环境版本 jdk&#xff0c;tongweb版本确认是否正确 2.检查tongweb的 license是不是永久版本&#xff0c;试用期版本到期会停止服务。 3 JVM运行编码配置-根据系统需要配置 3.1-Dfile.encodingUTF-8 编码根据系统需要配置 4. tongweb运行内存大小--根据系统需要配置 4.1一般 …

编译原理--LL(1)分析法实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试LL&#xff08;1&#xff09;分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL&#xff08;1&#xff09;分析法的理解。 2.实验要求 对下列文法&#xff0c;用LL&#xff08;…

实际中进行GC调整

调优垃圾回收与任何其他性能调优活动没有什么不同。 您需要确保了解当前的情况和期望的结果&#xff0c;而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常&#xff0c;只需执行以下过程即可&#xff1a; 陈述您的绩效目标 运行测试 测量 与目标比较 进行更改并…

达梦数据库出现卡慢简单分析点

1.检查是否有锁表 查询锁表&#xff1a;select sess_id,sql_text from v$sessions sess,v$lock lck where sess.trx_idlck.trx_id and lck.blocked1; --查询僵死会话 解锁&#xff1a;根据会话ID&#xff0c;停止会话 sp_close_session(sess_id); 2.根据v$sessions,V$L…

SEL selector (二)

SEL消息机制工作原理是什么 引用下面文章&#xff1a; 我们在之前有提到,一个类就像一个 C 结构.NSObject 声明了一个成员变量: isa. 由于 NSObject 是所有类的根类,所以所有的对象都会有一个 isa 的成员变量[公共继承].而该 isa 变量指向该对象的类(图3.15)[类在Objective-C中…

mobile cpu上禁用alpha test的相关总结

因为&#xff0c;每家芯片的特性不同&#xff0c;根据向framebuffer写法的不同&#xff0c;分为tile-based的mobile cpu&#xff0c;如ImgTec PowerVR&#xff0c;ARM Mali&#xff0c;一部分老版本Qualcomm Adreno。还有标准的direct&#xff08;immediate&#xff09;的mobil…

达梦定时迁移数据

1. 生成迁移源代码 1.1 启动DM迁移工具&#xff08;bin/dts.exe&#xff09; 1.2 右击迁移管理空白处 -> 新建工程 1.3 展开工程 -> 右击迁移&#xff0c;新建迁移 -> 输入迁移名称&#xff0c;确认 1.4 右击迁移名称&#xff0c;打开 -> 输入源数据库连接信息&…