长下文菜单,即长按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
可以看到两个菜单项,看下菜单项的各个属性:
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 }
1 26 7 13 14 15
1 23 4 5 16- 山东大学
6- 山东科技大学
7- 山东理工大学
8- 山东建筑大学
9- 山东农业大学
10- 济南大学
11- 烟台大学
12- 鲁东大学
13- 临沂大学
14- 聊城大学
15
效果图: