Android除了可以通过菜单键弹出OptionsMenu外,还可以长按某个控件来弹出ContextMenu。比如EditeText就可以通过长按来弹出拥有“cut”,"copy","paste"等项的ContextMenu。
ContextMenu和OptionsMenu相比主要有以下区别:
1,ContextMenu必须通过Activity的
registerForContextMenu(View)来进行注册,而OptionsMenu不用。
2,ContextMenu不支持icon,而OptionsMenu支持。
3,ContextMenu可以有头,可以通过setHeaderIcon,setHeaderTitle,setHeaderView来设置头,否则就没有头。
4,弹出的方式不一样。
使用ContextMenu主要需要重载Activity的以下函数:
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
public void onContextMenuClosed (Menu menu)
public boolean onContextItemSelected (MenuItem item)
注意事项:ContextMenu的任何项在被选中后,整个ContextMenu会自动被系统关闭掉,即使多选项也是这样。这样的话,多选项的行为就有些怪异。查看Android的源码后,发现这是个Android的bug,应该是google没考虑多选项的情况。
实例1
文件ContextMenuActivity.java
package com.teleca;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ContextMenuActivity extends Activity {
View myContextMenuView=null;
View myContextMenuView2=null;
View myContextMenuView3=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myContextMenuView=this.findViewById(R.id.TextView1);
my