Android中的菜单分为三种,即选项菜单(系统菜单),上下文菜单和弹出式菜单。

选项菜单:

一个activity只有一个选项菜单,选项菜单的创建方式有低版本创建和高版本创建两种。最常用的是干版本创建,所以这里着重高版本的创建方式的介绍。

创建步骤:

1, 在res/menu/文件夹中xml 中定义每个菜单项

<item
 android:id =" 菜单中每个Item的id"
 android:title="每个Item 文本信息"
 android:orderInCategory :Menu中显示的顺序,数字越小, 越在前面显示, 如果数字一样, 先写那个  那个就在前面位置显示
  android:showAsAcrtion:设置Menu何时和怎样显示在Action Bar中。

其中属性值:never  :   永远都不显示在Action Bar中
    always :   一直显示在Action Bar中
    ifRoom :   如果有空间 则显示在Action Bar中
/>
2, 在activity中 显示菜单项
重写父类的方法:
onCreateOptionsMenu(Menu menu)
{
//加载菜单
getMenuInflater.inflat(R.menu.main,menu);
}
3, 在activity中 每个菜单项实现点击
重新父类的方法:
onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
 case R.id.action_red:
.......
 break;
}
}

低版本创建: 
//低版本的创建  /**
* groupId  分组ID
* itemId   菜单项的Id
* order    排序
* title    菜单显示的文字
*/
menu.add(menu.NONE, MENU_ONE, menu.NONE, "代码创建的菜单");

//带有子菜单的一级菜单
SubMenu subMenu = menu.addSubMenu(menu.NONE, 2, menu.NONE, "sub 1");
subMenu.add(menu.NONE, 21, 1, "sub 1-1");
subMenu.add(menu.NONE, 22, 2, "sub 1-2");
subMenu.add(menu.NONE, 23, 0, "sub 1-3");
实例:

  1. public class MainActivity extends Activity {
  2. private TextView t;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. t = (TextView) findViewById(R.id.t);
  8. }
  9. @Override
  10. public boolean onCreateOptionsMenu(Menu menu) {
  11. // Inflate the menu; this adds items to the action bar if it is present.
  12. getMenuInflater().inflate(R.menu.main, menu);
  13. return true;
  14. }
  15. @Override
  16. public boolean onOptionsItemSelected(MenuItem item) {
  17. switch (item.getItemId()) {
  18. case R.id.red:
  19. t.setTextColor(Color.RED);
  20. t.setTextSize(12);
  21. break;
  22. case R.id.green:
  23. t.setTextColor(Color.GREEN);
  24. t.setTextSize(22);
  25. break;
  26. case R.id.blue:
  27. t.setTextColor(Color.BLUE);
  28. t.setTextSize(32);
  29. break;
  30. }
  31. return super.onOptionsItemSelected(item);
  32. }
  1. <item
  2. android:id="@+id/ACTION_COLOR"
  3. android:title="选择颜色">
  4. <menu >
  5. <group >
  6. <item
  7. android:id="@+id/red"
  8. android:title="红色" />
  9. <item
  10. android:id="@+id/green"
  11. android:title="绿色" />
  12. <item
  13. android:id="@+id/blue"
  14. android:title="蓝色" />
  15. </group>
  16. </menu>
  17. </item>

上下文菜单:

ContextMenu 和OptionsMenu的区
1,  OptionsMenu 的拥有者是Activity;  ContextMenu 上下文菜单的拥有者是Activity中View
2,  每个Activity中有且只有一个OptionsMenu,它为整个Activity服务;  每个Activity中可以有多个View, 那个View需要显示上下文菜单 需要为该View注册上下文菜单registerForContextMenu(View  view);
创建方式
1, 注册上下文菜单
2, res/menu/文件中的  创建每个Item项
3, 重写父类方法:  onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo)
/**
* 当长按View时调用

* ContextMenu menu
   需要显示的上下文菜单
* View v     用户选择的View
* ContextMenuInfo menuInfo 所选择界面的额外信息
*      (Spinner,ListView,GridView)
*      携带这AdapterView 的 posotion信息
--菜单可见--
4, 实现菜单项的点击: 重写父类的方法:  onContextItemSelected(MenuItem  item)
实例:

  1. public class MainActivity extends Activity {
  2. private ListView lv;
  3. private List<String> data = new ArrayList<String>();
  4. private ArrayAdapter<String> adapter;
  5. private int position = 0;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. lv = (ListView) findViewById(R.id.lv);
  11. for (int i = 0; i < 20; i++) {
  12. data.add("Item --->" + i);
  13. }
  14. adapter = new ArrayAdapter<String>(this,
  15. android.R.layout.simple_list_item_1, data);
  16. lv.setAdapter(adapter);
  17. // 1, 注册上下文对象
  18. registerForContextMenu(lv);
  19. }
  20. // 2, 在res/menu/中创建菜单项
  21. // 3, 重写父类的方法, 实现显示
  22. @Override
  23. public void onCreateContextMenu(ContextMenu menu, View v,
  24. ContextMenuInfo menuInfo) {
  25. super.onCreateContextMenu(menu, v, menuInfo);
  26. // 加载菜单页面
  27. getMenuInflater().inflate(R.menu.main, menu);
  28. // 获取当前选中ListView的Item的下标
  29. position = ((AdapterContextMenuInfo) menuInfo).position;
  30. }
  31. // 4, 重写父类的方法, 实现每个菜单项的点击
  32. @Override
  33. public boolean onContextItemSelected(MenuItem item) {
  34. switch (item.getItemId()) {
  35. case R.id.action_delete:
  36. // 从数据源中移除数据
  37. data.remove(position);
  38. // 刷新适配器
  39. adapter.notifyDataSetChanged();
  40. break;
  41. }
  42. return super.onContextItemSelected(item);
  43. }
  44. }
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  2. <item
  3. android:id="@+id/action_delete"
  4. android:orderInCategory="100"
  5. android:showAsAction="never"
  6. android:title="删除信息"/>
  7. </menu>

弹出菜单:

Popup Menu    弹出式菜单      Api 必须在11以上,  可以为任意View 创建弹出式菜单
  1, 得到PopupMenu的对象
   PopupMenu pMenu = new PopupMenu(this,位置参考的UI控件);

  2, 加载菜单
   getMenuInflater.inflat(R.menu.main,menu);

  3, 为PopupMenu设置监听器
  pMenu.setOnMenuItemClickListener(.....);

  4, 显示菜单
  pMenu.show();
实例:

    1. public class MainActivity extends Activity {
    2. private TextView tv;
    3. @Override
    4. protected void onCreate(Bundle savedInstanceState) {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.activity_main);
    7. tv = (TextView) findViewById(R.id.tv);
    8. }
    9. // 点击按钮弹出菜单
    10. public void change(View v) {
    11. // 得到popup对象
    12. PopupMenu popupMenu = new PopupMenu(MainActivity.this, v);
    13. // 加载菜单
    14. getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
    15. // 为 popup设置监听器
    16. popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
    17. @Override
    18. public boolean onMenuItemClick(MenuItem item) {
    19. // TODO Auto-generated method stub
    20. switch (item.getItemId()) {
    21. case R.id.action_color:
    22. tv.setTextColor(Color.CYAN);
    23. break;
    24. case R.id.action_size:
    25. tv.setTextSize(20);
    26. break;
    27. }
    28. return false;
    29. }
    30. });
    31. // 显示
    32. popupMenu.show();
    33. }
    34. }

Android--菜单详解的更多相关文章

  1. Android菜单详解(四)——使用上下文菜单ContextMenu

    之前在<Android菜单详解(二)——创建并响应选项菜单>和<Android菜单详解(三)——SubMenu和IconMenu>中详细讲解了选项菜单,子菜单和图标菜单.今天接 ...

  2. Android菜单详解(一)——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  3. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  4. 【Android】详解Android的menu菜单

    在软件应用过程中,菜单的存在是必不可少的,我这次讲一下,我对android菜单的一个基础做法吧 Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Men ...

  5. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

  6. Android编译系统详解(一)

    ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...

  7. Android签名详解(debug和release)

    Android签名详解(debug和release)   1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包 ...

  8. Android编译详解之lunch命令 【转】

    本文转载自: Android编译详解之lunch命令 (2012-10-08 10:27:55) 转载▼ 标签: it 分类: android内核剖析     Android的优势就在于其开源,手机和 ...

  9. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  10. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

随机推荐

  1. 分布式搜索ElasticSearch单机与服务器环境搭建

    从上方插件官网中下载适合的dist包,然后解压.进入bin目录,可以看到一堆sh脚本.在bin目录下创建一个test.sh: bin=/home/csonezp/Dev/elasticsearch-j ...

  2. iPhone的設置——FaceTime頁面

    這裏說的是蘋果的Hand off功能,系統升級後,蘋果的多部設備可以更好的“連續互通”.有電話打進來,iPhone.iPad和Mac都能收到,用戶可以任意選擇一款設備接電 話.同樣,iMessage也 ...

  3. html5 调用摄像头

    ---移动设备--- <input type="file" capture="camera" accept="image/*" id= ...

  4. mysql分区及实例演示

    一.为什么要分区? 需求:大数据.解决方案:分而治之,更细一点即为.将大表和大索引分为一个更小的操作单元 在mysql中,分区允许将表.索引和索引编排表细分为更小的单元.分区后,每个分区有自己单独的名 ...

  5. 自己用node.js 搭建APP服务器,然后用AFNetworking 请求 报如下错误:App TransportSecurity has blocked a cleartext HTTP (http://) resource load since it isinsecure. Temporary exceptions can be configured via your app's Info.

    "App TransportSecurity has blocked a cleartext HTTP (http://) resource load since it isinsecure ...

  6. Unity3D 开发 之 JDK安装与环境变量配置

     安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目录 ...

  7. win7安装virtualbox遇到的问题

    今天用台式机的时候想装个virtualbox跑centos做测试用,结果centos始终装不上,vbox一直提示无法开启任务.重装vbox,以及手动点击安装xxx.inf文件,都不行. 以前用的win ...

  8. soap request by afnetworking2.X/3.X

    for 2.X 参考 http://jiapumin.iteye.com/blog/2109378 AFHTTPRequestOperationManager *manager = [AFHTTPRe ...

  9. 20145209&20145309信息安全系统设计基础实验报告 (4)

    实验步骤 阅读和理解源代码 demo_read,demo_write 函数完成驱动的读写接口功能,do_write 函数实现将用户写入的数据逆序排列,通过读取函数读取转换后的数据.这里只是演示接口的实 ...

  10. UML聚合与组合

    http://www.cnblogs.com/shanwenbin/archive/2012/10/24/2737229.html UML聚合与组合 2012-10-24 15:35 by DayDa ...