安卓开发_浅谈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菜单
看这一行代码,
我们找到其对应的文件

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

main.xml文件代码如下:

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >

 2 

 3     <item

 4         android:id="@+id/action_menu_1"

 5         android:orderInCategory="100"

 6         android:showAsAction="never"

 7         android:title="复制"/>

 8     <item

 9         android:id="@+id/action_menu_2"

10         android:orderInCategory="100"

11         android:showAsAction="never"

12         android:title="粘贴"/>

13     <item

14         android:id="@+id/action_menu_3"

15         android:orderInCategory="100"

16         android:showAsAction="never"

17         android:title="剪切"/>

18 

19 </menu>

 

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

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     

 

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     @Override

22     protected void onCreate(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(new OnItemClickListener() {

32 

33             @Override

34             public void onItemClick(AdapterView<?> parent, View arg1, int pos,

35                     long id) {

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     @Override

46     public void onCreateContextMenu(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     @Override

65     public boolean 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         return super.onContextItemSelected(item);

82 

83     }

84 

85 }
ContextMenu_List.java
 1 <?xml version="1.0" encoding="utf-8"?>

 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3     android:layout_width="match_parent"

 4     android:layout_height="match_parent"

 5     android:orientation="vertical" >

 6 

 7     <ListView

 8         android:id="@+id/listView1"

 9         android:entries="@array/list"          

10     

11         android:layout_width="match_parent"

12         android:layout_height="wrap_content" >

13     </ListView>

14 

15 </LinearLayout>
donghua_layout.xml
 1 <?xml version="1.0" encoding="utf-8"?>

 2 <resources>

 3  

 4     <string-array name = "list">   

 5         <item>山东大学</item>

 6         <item>山东科技大学</item>

 7         <item>山东理工大学</item>

 8         <item>山东建筑大学</item>

 9         <item>山东农业大学</item>

10         <item>济南大学</item>

11         <item>烟台大学</item>

12         <item>鲁东大学</item>

13         <item>临沂大学</item>

14         <item>聊城大学</item>

15     </string-array>

16 </resources>
arrays.xml

效果图:

你可能感兴趣的:(contextMenu)