首先解释一下什么是上下文菜单,Android中上下文菜单就是ContextMenu。他的效果就像是PC机上的鼠标右键,当为一个视图注册了上下文菜单之后,长按(2秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。
下面讲讲实现过程:
1.覆盖Activity的onCreateContenxtMenu()方法,调用Menu的add方法添加菜单项(MenuItem)。
2.覆盖Activity的onContextItemSelected()方法,响应上下文菜单菜单项的单击事件。
3.调用registerForContextMenu()方法,为视图注册上下文菜单。
import android.app.ListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.ContextMenu.ContextMenuInfo; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.util.Log; public class MainActivity extends ListActivity { private static final int ITEM1 = Menu.FIRST; private static final int ITEM2 = Menu.FIRST + 1; private static final int ITEM3 = Menu.FIRST + 2; /** Calledwhentheactivityisfirstcreated. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); showListView(); // 为ListView的所有item注册ContextMenu registerForContextMenu(getListView()); // 这里的registerForContextMenu()也可以用下面的语句替代 // getListView().setOnCreateContextMenuListener(this); } private void showListView() { String[] mString = new String[] { "路飞-MonkeyDLuffy", "奈美-Nami", "卓洛-Zoro", "山治-Sanji", "尼可·罗宾-Ms.AllSunday", "乌索普-usoppu", "托尼托尼·乔巴-TonyTonyChopper", }; ArrayAdapter<String> mla = new ArrayAdapter<String>(MainActivity.this, R.layout.main, mString); MainActivity.this.setListAdapter(mla); } // 上下文菜单,本例会通过长按条目激活上下文菜单 @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { menu.setHeaderTitle("人物简介"); // 添加菜单项 menu.add(0, ITEM1, 0, "特长"); menu.add(0, ITEM2, 0, "战斗力"); menu.add(0, ITEM3, 0, "经典语录"); } // 菜单单击响应 @Override public boolean onContextItemSelected(MenuItem item) { // 获取当前被选择的菜单项的信息 // AdapterContextMenuInfoinfo=(AdapterContextMenuInfo)item.getMenuInfo(); // Log.i("braincol",String.valueOf(info.id)); switch (item.getItemId()) { case ITEM1: // 在这里添加处理代码 break; case ITEM2: // 在这里添加处理代码 break; case ITEM3: // 在这里添加处理代码 break; } return true; } }
main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myTextView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/hello" android:textSize="20sp" />