java contextmenu_安卓开发_浅谈ContextMenu(上下文菜单)

长下文菜单,即长按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菜单

看这一行代码,

我们找到其对应的文件

62514cd1d899a463fb40de6af643bbfd.png

main.xml文件代码如下:

1

2

3

5 android:orderInCategory="100"

6 android:showAsAction="never"

7 android:title="复制"/>

8

10 android:orderInCategory="100"

11 android:showAsAction="never"

12 android:title="粘贴"/>

13

15 android:orderInCategory="100"

16 android:showAsAction="never"

17 android:title="剪切"/>

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 @Override3 public voidonCreateContextMenu(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 @Override2 publicboolean 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 returnsuper.onContextItemSelected(item);19

20 }

完整代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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 classContextMenu_List extends Activity{20 privateListView list;21 @Override22 protected voidonCreate(Bundle savedInstanceState) {23 //TODO Auto-generated method stub

24 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(newOnItemClickListener() {32

33 @Override34 public void onItemClick(AdapterView> parent, View arg1, intpos,35 longid) {36 //TODO Auto-generated method stub

37 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 voidonCreateContextMenu(ContextMenu menu, View v,47 ContextMenuInfo menuInfo) {48 //TODO Auto-generated method stub

49 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 publicboolean onContextItemSelected(MenuItem item) {66 //TODO Auto-generated method stub

67 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 returnsuper.onContextItemSelected(item);82

83 }84

85 }

ContextMenu_List.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="utf-8"?>

2

3 android:layout_width="match_parent"

4 android:layout_height="match_parent"

5 android:orientation="vertical" >

6

7

9 android:entries="@array/list"

10

11 android:layout_width="match_parent"

12 android:layout_height="wrap_content" >

13

14

15

donghua_layout.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="utf-8"?>

2

3

4

5 山东大学

6 山东科技大学

7 山东理工大学

8 山东建筑大学

9 山东农业大学

10 济南大学

11 烟台大学

12 鲁东大学

13 临沂大学

14 聊城大学

15

16

arrays.xml

效果图:

a9eaba11a239f6772206e3040821b922.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值