Android 系统菜单与自定义菜单实现方法如下:
系统菜单显示DefaultMenu.java

package com.wxz.menu;import com.wxz.menu.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class DefaultMenu extends Activity {private Button btnCustomizeMenu;private TextView tvTip;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);this.setTitle("Android 系统菜单");  btnCustomizeMenu = (Button)findViewById(R.id.btnCustomizeMenu);  btnCustomizeMenu.setOnClickListener(new ClickEvent());  tvTip = (TextView)findViewById(R.id.tvTip);  tvTip.setText("请按Menu键(F2)显示系统菜单");} class ClickEvent implements View.OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(v==btnCustomizeMenu){Intent it = new Intent();it.setClass(DefaultMenu.this, CustomizeMenu.class);startActivity(it);}}  }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {/* *  * add()方法的四个参数,依次是: *  * 1、组别,如果不分组的话就写Menu.NONE, *  * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 *  * 3、顺序,那个菜单现在在前面由这个参数的大小决定 *  * 4、文本,菜单的显示文本 */menu.add(Menu.NONE, Menu.FIRST + 1, 2, "删除").setIcon(android.R.drawable.ic_menu_delete);// setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,以// android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的menu.add(Menu.NONE, Menu.FIRST + 2, 3, "保存").setIcon(android.R.drawable.ic_menu_edit);menu.add(Menu.NONE, Menu.FIRST + 3, 4, "帮助").setIcon(android.R.drawable.ic_menu_help);menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(android.R.drawable.ic_menu_add);        //返回true则显示,返回false则不显示    return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case Menu.FIRST + 1:Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();break;case Menu.FIRST + 2:Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show();break;case Menu.FIRST + 3:Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();break;case Menu.FIRST + 4:Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();break;   }        // 返回false则正常显示,返回true则被消费掉return false;}@Overridepublic void onOptionsMenuClosed(Menu menu) {Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();}@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {Toast.makeText(this,"选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",Toast.LENGTH_LONG).show();// 如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用return true;}}

自定义菜单显示CustomizeMenu.java

package com.wxz.menu;import java.util.ArrayList;import java.util.HashMap;import com.wxz.menu.R;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.DialogInterface.OnKeyListener;import android.os.Bundle;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class CustomizeMenu extends Activity {private Button btnCustomizeMenu;private Button btnDefaultMenu;private TextView tvTip;private Context mContext;private boolean isMore = true;// menu菜单翻页控制AlertDialog menuDialog;// menu菜单DialogGridView menuGrid;View menuView;// 菜单图片int[] menu_image_array = { R.drawable.menu_search,R.drawable.menu_bookmark, R.drawable.menu_bookmark_sync_import,R.drawable.menu_sharepage, R.drawable.menu_quit,R.drawable.menu_nightmode, R.drawable.menu_refresh,R.drawable.menu_more };// 菜单文字 String[] menu_name_array = { "搜索", "书签", "加入书签", "分享页面", "退出", "夜间模式","刷新", "更多" };// 菜单图片2 int[] menu_image_array2 = { R.drawable.menu_auto_landscape,R.drawable.menu_checkupdate, R.drawable.menu_checknet,R.drawable.menu_refreshtimer, R.drawable.menu_syssettings,R.drawable.menu_help, R.drawable.menu_about, R.drawable.menu_return };// 菜单文字2 String[] menu_name_array2 = { "自动横屏", "检查更新", "检查网络", "定时刷新", "设置", "帮助","关于", "返回" };@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);mContext = CustomizeMenu.this;this.setTitle("Android 自定义菜单");btnCustomizeMenu = (Button) findViewById(R.id.btnCustomizeMenu);btnCustomizeMenu.setVisibility(View.GONE);btnDefaultMenu = (Button) findViewById(R.id.btnDefaultMenu);btnDefaultMenu.setVisibility(View.VISIBLE);btnDefaultMenu.setOnClickListener(new ClickEvent());tvTip = (TextView) findViewById(R.id.tvTip);tvTip.setText("请按Menu键(F2)显示自定义菜单");menuView = View.inflate(this, R.layout.gridview_menu, null);// 创建AlertDialogmenuDialog = new AlertDialog.Builder(this).create();menuDialog.setView(menuView);menuDialog.setOnKeyListener(new OnKeyListener() {public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_MENU)// 监听按键dialog.dismiss();return false;}});menuGrid = (GridView) menuView.findViewById(R.id.gridview);menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array));/** 监听menu选项 **/menuGrid.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {switch (arg2) {case 0:// 搜索,自动横屏if (isMore)Toast.makeText(mContext, "点击了搜索", Toast.LENGTH_SHORT).show();elseToast.makeText(mContext, "点击了自动横屏", Toast.LENGTH_SHORT).show();break;case 1:// 书签,检查更新if (isMore)Toast.makeText(mContext, "点击了书签", Toast.LENGTH_SHORT).show();elseToast.makeText(mContext, "点击了检查更新", Toast.LENGTH_SHORT).show();break;case 2:// 加入书签,检查网络if (isMore)Toast.makeText(mContext, "点击了加入书签", Toast.LENGTH_SHORT).show();elseToast.makeText(mContext, "点击了检查网络", Toast.LENGTH_SHORT).show();break;case 3:// 分享页面,定时刷新if (isMore)Toast.makeText(mContext, "点击了分享页面", Toast.LENGTH_SHORT).show();elseToast.makeText(mContext, "点击了定时刷新", Toast.LENGTH_SHORT).show();break;                case 7:// 更多if (isMore) {menuGrid.setAdapter(getMenuAdapter(menu_name_array2,menu_image_array2));isMore = false;} else {// 首页menuGrid.setAdapter(getMenuAdapter(menu_name_array,menu_image_array));isMore = true;}menuGrid.invalidate();// 更新menumenuGrid.setSelection(7);break;default://退出, 夜间模式,刷新,设置,帮助,关于Toast.makeText(mContext, "点击了其它菜单项", Toast.LENGTH_SHORT).show();break;}}});}class ClickEvent implements View.OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (v == btnDefaultMenu) {Intent it = new Intent();it.setClass(CustomizeMenu.this, DefaultMenu.class);startActivity(it);}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add("menu");// 必须创建一项return super.onCreateOptionsMenu(menu);}private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {ArrayList> data = new ArrayList>();for (int i = 0; i < menuNameArray.length; i++) {HashMap map = new HashMap();map.put("itemImage", imageResourceArray[i]);map.put("itemText", menuNameArray[i]);data.add(map);}SimpleAdapter simperAdapter = new SimpleAdapter(this, data,R.layout.item_menu, new String[] { "itemImage", "itemText" },new int[] { R.id.item_image, R.id.item_text });return simperAdapter;}@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {if (menuDialog == null) {menuDialog = new AlertDialog.Builder(this).setView(menuView).show();} else {menuDialog.show();}return false;// 返回为true 则显示系统menu}}

主配置文件main.xml

<?xml version="1.0" encoding="utf-8"?>    

菜单布局表格配置文件gridview_menu.xml

<?xml version="1.0" encoding="utf-8"?>      

菜单项配置文件item_menu.xml

<?xml version="1.0" encoding="utf-8"?>


开发环境:XP3+Eclipse+Android2.2+JDK6.0
测试环境:Android2.2模拟器
源代码:http://download.csdn.net/detail/xinzheng_wang/4452501

 

 

 

 

 





更多相关文章

  1. Android(安卓)读取并显示通讯录
  2. android 图片点击一下就放大到全屏,再点一下就回到原界面
  3. 仿美团首页功能选择的实现
  4. Android弹出多选框下拉框的实例
  5. Android(安卓)Toast
  6. 类似股票的实时动态折线图
  7. 【Android】创建Popwindow弹出菜单的两种方式
  8. Android(安卓)TextView自定义选中弹出菜单记笔记功能
  9. TextView 在xml文件中的解释

随机推荐

  1. mysql5.6和5.7的权限密码设置
  2. JOIN vs. WHERE:为什么获得相同结果的两
  3. hibernate连接mysql,不能自动建表和添加数
  4. 数据库实践二:高级sql语句
  5. 利用LVS+Keepalived实现MySQL高可用1
  6. 简单统计报表例子(存储过程)
  7. 关于mysql jsp字符编码的问题解决
  8. SQL大量数据查询的优化 及 非用like不可
  9. 存储过程放在sql脚本里,命令行导入总是提
  10. mysql.cnf配置后启动不了~