package com.gem.android.menu;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener,OnMenuItemClickListener{
/** Called when the activity is first created. */
private Menu menu;
//Menu.FIRST的值是1
private int menuItemId = Menu.FIRST;
private Button button;
private EditText editText;
private TextView textView;
/*
* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.btnAddMenu);
button.setOnClickListener(this);
editText = (EditText) findViewById(R.id.edittext);
textView = (TextView) findViewById(R.id.textview);
// 注册上下文菜单
this.registerForContextMenu(button);
this.registerForContextMenu(editText);
this.registerForContextMenu(textView);
}
/*
* 向Activity菜单添加10个菜单项,菜单项的id从10开始
*/
@Override
public void onClick(View view) {
//只有单击手机上的“Menu”按钮,onCreateOptionsMenu方法才会被调用,
//因此,如果不按“Menu”按钮,Main类的menu变量的值是null
if (menu == null)
return;
// 向Activity菜单添加10个菜单项,菜单项的id从10开始
for (int i = 10; i < 20; i++) {
int id = menuItemId++;
menu.add(1, id, id, "菜单" + i);
}
}
private void showDialog(String message) {
new AlertDialog.Builder(this).setMessage("您单击了【" + message + "】菜单项.").show();
}
/*
* 单击Activity菜单、子菜单、上下文菜单的菜单项时调用该方法
*/
@Override
public boolean onMenuItemClick(MenuItem item) {
Log.d("onMenuItemClick", "true");
this.showDialog(item.getTitle().toString());
return false;
}
/*
* 向父菜单添加3个菜单项
*/
private void addMenu(Menu menu) {
//添加项
MenuItem addMenuItem = menu.add(1, menuItemId++, 1, "添加");
//将AddActivity与“添加”菜单项进行关联
addMenuItem.setIntent(new Intent(this, AddActivity.class));
//添加删除项
MenuItem deleteMenuItem = menu.add(1, menuItemId++, 2, "删除");
//设置删除按钮的背景图
deleteMenuItem.setIcon(R.drawable.delete);
deleteMenuItem.setOnMenuItemClickListener(this);
MenuItem menuItem1 = menu.add(1, menuItemId++, 3, "菜单1");
menuItem1.setOnMenuItemClickListener(this);
MenuItem menuItem2 = menu.add(1, menuItemId++, 4, "菜单2");
}
private void addSubMenu(Menu menu) {
// 添加子菜单
SubMenu fileSubMenu = menu.addSubMenu(1, menuItemId++, 5, "文件");
//设置在选项菜单中显示的图像
fileSubMenu.setIcon(R.drawable.file);
//设置子菜单头的图像
fileSubMenu.setHeaderIcon(R.drawable.headerfile);
// 子菜单不支持图像
MenuItem newMenuItem = fileSubMenu.add(1, menuItemId++, 1, "新建");
//将第1个子菜单项设置成复选框类型
newMenuItem.setCheckable(true);
//选中第1个子菜单项中的复选框
newMenuItem.setChecked(true);
MenuItem openMenuItem = fileSubMenu.add(2, menuItemId++, 2, "打开");
MenuItem exitMenuItem = fileSubMenu.add(2, menuItemId++, 3, "退出");
//将第3个子菜单项的选项按钮设为选中状态
exitMenuItem.setChecked(true);
//将后两个子菜单项设置成选项按钮类型
fileSubMenu.setGroupCheckable(2, true, true);
}
/*
* 单击Menu按钮时调用该方法来建立Activity菜单
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
this.addMenu(menu);
this.addSubMenu(menu);
return super.onCreateOptionsMenu(menu);
}
/*
* 在Activity菜单显示前调用该方法,可以在这个方法中修改指定的菜单项
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.d("onPrepareOptionsMenu", "true");
return super.onPrepareOptionsMenu(menu);
}
/*
* 当上下文菜单关闭时调用该方法(non-Javadoc)
* @see android.app.Activity#onContextMenuClosed(android.view.Menu)
*/
@Override
public void onContextMenuClosed(Menu menu) {
Log.d("onContextMenuClosed", "true");
super.onContextMenuClosed(menu);
}
/*
* 当Activity菜单显示时调用该方法,这个方法在 onPrepareOptionsMenu之后被调用(non-Javadoc)
* @see android.app.Activity#onMenuOpened(int, android.view.Menu)
*/
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
Log.d("onMenuOpened", "true");
return super.onMenuOpened(featureId, menu);
}
/*
* 当Activity菜单被关闭时调用该方法(non-Javadoc)
* @see android.app.Activity#onOptionsMenuClosed(android.view.Menu)
*/
@Override
public void onOptionsMenuClosed(Menu menu) {
Log.d("onOptionsMenuClosed", "true");
super.onOptionsMenuClosed(menu);
}
/*
* (non-Javadoc)
* @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
*/
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
super.onMenuItemSelected(featureId, item);
Log.d("onMenuItemSelected:itemId=", String.valueOf(item.getItemId()));
if ("菜单1".equals(item.getTitle()))
this.showDialog("<" + item.getTitle().toString() + ">");
else if ("菜单2".equals(item.getTitle()))
showDialog("<" + item.getTitle().toString() + ">");
return false;
}
/*
* 单击每一个Activity菜单项时调用该方法(non-Javadoc)
* @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("onOptionsItemSelected:itemid=", String.valueOf(item.getItemId()));
return true;
}
/*
* 单击上下文菜单的某个菜单项时调用该方法(non-Javadoc)
* @see android.app.Activity#onContextItemSelected(android.view.MenuItem)
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
Log.d("onContextItemSelected:itemid=", String.valueOf(item.getItemId()));
if (!"子菜单".equals(item.getTitle().toString())){
this.showDialog("*" + item.getTitle().toString() + "*");
}
return super.onContextItemSelected(item);
}
/*
* 显示上下文菜单时调用该方法来添加自定义的上下文菜单项(non-Javadoc)
* @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo)
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, view, menuInfo);
// menu.clear();
menu.setHeaderTitle("上下文菜单");
menu.setHeaderIcon(R.drawable.face);
menu.add(0, menuItemId++, Menu.NONE, "菜单项1").setCheckable(true).setChecked(true);
menu.add(20, menuItemId++, Menu.NONE, "菜单项2");
menu.add(20, menuItemId++, Menu.NONE, "菜单项3").setChecked(true);
menu.setGroupCheckable(20, true, true);
SubMenu sub = menu.addSubMenu(0, menuItemId++, Menu.NONE, "子菜单");
sub.add("子菜单项1");
sub.add("子菜单项2");
}
}
完整代码下载:http://download.youkuaiyun.com/detail/zhangpengyu321/5990855