显示上下文菜单是常用的显示菜单的方式之一,通常用于长按view控件(listview和girdview比较常见)显示菜单的情况。
整体思路:首先在main.xml文件中定义一个菜单,其中包括几个可供选择的item,在MainActivity中定义一个getData方法,用于生成一个List<String>的数据,定义一个listivew,将数据绑定到listview,重写这个onCreateContextMenu方法,在这个方法中绑定R.menu.main文件,重写onContextItemSelected方法,定义点击执行的操作,在onCreate方法中注册listview的上下文菜单。
main.xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/edit" android:orderInCategory="100" android:showAsAction="never" android:title="Edit"/> <item android:id="@+id/share" android:orderInCategory="100" android:showAsAction="never" android:title="Share"/> <item android:id="@+id/delete" android:orderInCategory="100" android:showAsAction="never" android:title="Delete"/> </menu>activity_main.xml文件:
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView><pre name="code" class="java">MainActivity.java文件:
public class MainActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView1); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getData()); listView.setAdapter(adapter); // 给listview注册上下文菜单 这样长按listview中的每一项就会弹出上下文菜单 registerForContextMenu(listView);//这里的参数是View类型的就可以使用,只不过要看使用是否得体 } public List<String> getData() { List<String> list = new ArrayList<String>(); for (int i = 1; i <= 7; i++) { list.add("jack" + i); } return list; } // 普通的可选菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // 上下文菜单 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.main, menu); } // 响应上下文菜单的点击操作 @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.delete: Toast.makeText(MainActivity.this, "Delete", 1).show(); break; case R.id.share: Toast.makeText(MainActivity.this, "Share", 1).show(); break; case R.id.edit: Toast.makeText(MainActivity.this, "Edit", 1).show(); break; } return super.onContextItemSelected(item); } }