import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private final int MENU_ADD = 1, MENU_SEND = 2, MENU_DEL = 3;
private final int GROUP_DEFAULT = 0, GROUP_DEL = 1;
private final int ID_DEFAULT = 0;
private final int ID_TEXT1 = 1, ID_TEXT2 = 2, ID_TEXT3 = 3;
private String[] choices = { "Press me", "Try again", "Change me" };
private static int itemNum = 0;
private static TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
registerForContextMenu(tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(GROUP_DEFAULT, MENU_ADD, 0, "ADD").setIcon(
R.drawable.ic_launcher);
menu.add(GROUP_DEFAULT, MENU_SEND, 0, "Send");
menu.add(GROUP_DEFAULT, MENU_DEL, 0, "Delete");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ADD:
create_note();
return true;
case MENU_SEND:
send_note();
return true;
case MENU_DEL:
delete_note();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private void delete_note() {
itemNum--;
}
private void send_note() {
Toast.makeText(this, "ItemNum:" + itemNum, Toast.LENGTH_SHORT).show();
}
private void create_note() {
itemNum++;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (itemNum > 0) {
menu.setGroupVisible(GROUP_DEL, true);
} else {
menu.setGroupVisible(GROUP_DEL, false);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
if (v.getId() == R.id.tv) {
SubMenu textMenu = menu.addSubMenu("Change Text");
textMenu.add(0, ID_TEXT1, 0, choices[0]);
textMenu.add(0, ID_TEXT2, 0, choices[1]);
textMenu.add(0, ID_TEXT3, 0, choices[2]);
menu.add(0, ID_DEFAULT, 0, "Original TEXT");
}
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
return super.onContextItemSelected(item);
}
} 这个例子把所有的菜单类型全部包括进去了。下面就解析下这个例子----
onCreateOptionsMenu()方法只被调用一次,在Activity的其他部分不需要被再次构。然而,如果在运行时需要改变任意菜单选项,可以随时调用onPrepareOptionMenu()方法。如果选项菜单中的某一项被点击,onOptionsItemSelected()方法会被调用。调用时会传递选中的菜单项的ID,可以使用switch语句来确定被选中的选项是哪个。接下来就是Menu.add()这个函数了