博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓开发_浅谈ContextMenu(上下文菜单)
阅读量:7027 次
发布时间:2019-06-28

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

长下文菜单,即长按view显示一个菜单栏

与OptionMenu的区别

OptionMenu对应的是activity,一个activity只能拥有一个选项菜单
ContextMenu对应的是View,每个View都可以设置上下文菜单
一般情况下ContextMenu常用语ListView或者GridView;

 

 

创建和响应上下文菜单过程:

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

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

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

 

有两种方式实现:

一、java代码动态实现

 

1 menu.setHeaderTitle("操作");2         menu.setHeaderIcon(R.drawable.icon_72);3         4         //动态添加上下文菜单5          menu.add(1, 100, 1, "复制");6          menu.add(1, 101, 1, "粘贴");7          menu.add(1, 102, 1, "剪切");

二、xml文件静态实现

1 MenuInflater inflater = getMenuInflater(); 2         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
看这一行代码, 我们找到其对应的文件

main.xml文件代码如下:

1 
2 3
8
13
18 19

 

可以看到两个菜单项,看下菜单项的各个属性:

1、 android:id=   是菜单项id
2、android:orderInCategory= 是菜单项优先级,值越大,优先级越多,当菜单项过多时,可隐藏在折叠菜单中
3、android:showAsAction=

  原来是特定版本用到的,当你的应用程序目标设为平台(即 Android 3.0)时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,  对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。 这个属性可接受的值有:

    1.alaways:这个值会使菜单项一直显示在ActionBar上。

    2.ifRoom:如果有足够的空间,这个值会使菜单显示在ActionBar上。

    3.never:这个值菜单永远不会出现在ActionBar是。

    4.withText:这个值使菜单和它的图标,菜单文本一起显示。

4、android:title= 是菜单项名字

1)注册上下文菜单

1 this.registerForContextMenu(list);

2)生成上下文菜单

1 //创建上下文菜单 2     @Override 3     public void onCreateContextMenu(ContextMenu menu, View v, 4             ContextMenuInfo menuInfo) { 5         // TODO Auto-generated method stub 6         super.onCreateContextMenu(menu, v, menuInfo); 7         //设置menu显示的内容 8          9         menu.setHeaderTitle("操作");  //菜单栏标题10         menu.setHeaderIcon(R.drawable.icon_72);  //菜单栏图标11         12         //动态添加上下文菜单13 //        menu.add(1, 100, 1, "复制");14 //        menu.add(1, 101, 1, "粘贴");15 //        menu.add(1, 102, 1, "剪切");16         //xml文件静态创建17         MenuInflater inflater = getMenuInflater(); 18         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单19     }20

 在onCreateContextMenu()方法中获得点击的列表项

1 AdapterContextMenuInfo menuInfos = (AdapterContextMenuInfo) menuInfo; 2         curItemPosition = menuInfos.position;(curItemPosition 代表点击列表中第几项出现的上下文菜单)

 

3)响应上下文菜单项

1 @Override 2     public boolean onContextItemSelected(MenuItem item) { 3         // TODO Auto-generated method stub 4         switch (item.getItemId()) { 5         case 100: 6             Toast.makeText(ContextMenu_List.this, "选择的复制操作", 1).show(); 7             break; 8         case 101: 9             Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", 1).show();10             break;11         case 102:12             Toast.makeText(ContextMenu_List.this, "选择的剪切操作", 1).show();13             break;14 15         default:16             break;17         }18         return super.onContextItemSelected(item);19 20     }

 

完整代码:

1 package information; 2  3 import com.example.allcode.R; 4  5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.view.ContextMenu; 8 import android.view.MenuInflater; 9 import android.view.MenuItem;10 import android.view.View;11 import android.view.ContextMenu.ContextMenuInfo;12 import android.view.animation.AnimationUtils;13 import android.view.animation.LayoutAnimationController;14 import android.widget.AdapterView;15 import android.widget.AdapterView.OnItemClickListener;16 import android.widget.ListView;17 import android.widget.Toast;18 19 public class ContextMenu_List extends Activity{20     private ListView list;21     @Override22     protected void onCreate(Bundle savedInstanceState) {23         // TODO Auto-generated method stub24         super.onCreate(savedInstanceState);25         setContentView(R.layout.donghua_layout);26         27         28         list = (ListView) findViewById(R.id.listView1);29         this.registerForContextMenu(list);30         //为列表视图中选中的项添加响应事件31         list.setOnItemClickListener(new OnItemClickListener() {32 33             @Override34             public void onItemClick(AdapterView
parent, View arg1, int pos,35 long id) {36 // TODO Auto-generated method stub37 String result = parent.getItemAtPosition(pos).toString(); //获取选择项的值38 Toast.makeText(ContextMenu_List.this, "点击了 "+result, Toast.LENGTH_SHORT).show();//输出选中项消息39 }40 });41 42 43 }44 //创建上下文菜单45 @Override46 public void onCreateContextMenu(ContextMenu menu, View v,47 ContextMenuInfo menuInfo) {48 // TODO Auto-generated method stub49 super.onCreateContextMenu(menu, v, menuInfo);50 //设置menu显示的内容51 52 menu.setHeaderTitle("操作");53 menu.setHeaderIcon(R.drawable.icon_72);54 55 //动态添加上下文菜单56 // menu.add(1, 100, 1, "复制");57 // menu.add(1, 101, 1, "粘贴");58 // menu.add(1, 102, 1, "剪切");59 //xml文件静态创建60 MenuInflater inflater = getMenuInflater(); 61 inflater.inflate(R.menu.main, menu);//第一个参数是xml文件 第二个参数是menu菜单62 }63 64 @Override65 public boolean onContextItemSelected(MenuItem item) {66 // TODO Auto-generated method stub67 switch (item.getItemId()) {68 case 100:69 Toast.makeText(ContextMenu_List.this, "选择的复制操作", 1).show();70 break;71 case 101:72 Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", 1).show();73 break;74 case 102:75 Toast.makeText(ContextMenu_List.this, "选择的剪切操作", 1).show();76 break;77 78 default:79 break;80 }81 return super.onContextItemSelected(item);82 83 }84 85 }
ContextMenu_List.java
1 
2
6 7
13
14 15
donghua_layout.xml
1 
2
3 4
5
山东大学
6
山东科技大学
7
山东理工大学
8
山东建筑大学
9
山东农业大学
10
济南大学
11
烟台大学
12
鲁东大学
13
临沂大学
14
聊城大学
15
16
arrays.xml

效果图:

转载地址:http://ecrxl.baihongyu.com/

你可能感兴趣的文章
Java 接口技术 Interface
查看>>
函数草稿
查看>>
织梦系统学习:文章页当前位置的写法(自认对SEO有用)
查看>>
PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)
查看>>
vue input输入框长度限制
查看>>
深入理解Java虚拟机(类加载机制)
查看>>
在500jsp错误页面获取错误信息
查看>>
iOS-CALayer遮罩效果
查看>>
为什么需要版本管理
查看>>
五、Dart 关键字
查看>>
React Native学习笔记(一)附视频教学
查看>>
记Promise得一些API
查看>>
javascript事件之调整大小(resize)事件
查看>>
20145234黄斐《Java程序设计》第六周学习总结
查看>>
【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)...
查看>>
hibernate 和 mybatis区别
查看>>
互联网广告综述之点击率特征工程
查看>>
HDU3421 Max Sum II【序列处理】
查看>>
POJ NOI MATH-7653 地球人口承载力估计
查看>>
iOS UI高级之网络编程(HTTP协议)
查看>>