典型菜单资源结构:<menu>根元素且没有属性,在<menu>根元素里面会嵌套<item>和<group>子元素,<item>里面可以嵌套<menu>形成子菜单。

<group>表示一个菜单组,相同的菜单组可以一起设置其属性,属性说明如下

id:唯一标示该菜单组的引用id

meunCategory:对菜单进行分类,定义菜单的优先级,有效值为container,system,secondary和alternative。

orderInCategory:一个分类排序整数

checkableBehavior:选择行为,单选多选还是其它,有效值为none,all,single

visable:是否可见,true或false

enabled:是否可见,true或false

<item>表示菜单项,包含在<menu>或者<group>中的有效属性,说明如下

id:唯一标示菜单的ID引用

orderInCategory:分类排序

menuCategory:菜单分类

title:菜单标题字符串

titleCondensed:浓缩标题,适合标题太长的时候使用

icon:菜单的图标

alphabeticShortcut:字符快捷键

numericShortcut:数字快捷键

checkable:是否可选

checked:是否已被选中

visible:是否可见

enabled:是否可用

1.菜单xml文件示例file_menu.xml

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

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item

       android:title="File"

       android:icon="@drawable/file">

        <menu>

            <group

               android:id="@+id/noncheckable_group"

               android:checkableBehavior="none">

                <item

                android:id="@+id/newFile"

                android:title="New"

                android:alphabeticShortcut="n"/>

                <item

                android:id="@+id/openFile"

                     android:title="Open"

                     android:alphabeticShortcut="o"/>

                <item

                android:id="@+id/saveFile"

                android:title="Save"

                android:alphabeticShortcut="s"/>

            </group>

        </menu>

    </item>

    <item android:title="Edit" android:icon="@drawable/edit">

        <menu>

            <group android:id="@+id/edit_group"

                    android:checkableBehavior="single">

                <item android:id="@+id/cut"

                      android:title="Cut" />

                <item android:id="@+id/copy"

                      android:title="Copy"/>

                <item android:id="@+id/past"

                      android:title="Past"/>

            </group>

        </menu>

    </item>

    <item android:title="Help" android:icon="@drawable/help">

        <menu>

            <group android:id="@+id/help_group">

                <item android:id="@+id/about"

                        android:title="About" />

                <item android:id="@+id/exit"

                        android:title="Exit" />

            </group>

        </menu>

    </item>

</menu>

2.java代码中加载菜单

//private MenuInflater mi;

//mi = new MenuInflater(this);

/*

 * 创建菜单

 */

public boolean onCreateOptionsMenu(Menu menu) {

    mi.inflate(R.menu.file_menu, menu);

    return true;

}

//菜单响应

@Override

public boolean onOptionsItemSelected(MenuItem item) {

   switch (item.getItemId()) {

   case R.id.about:

          aboutAlert("本实例演示的是如何使用XML菜单资源来定义菜单!");

          break;

   case R.id.exit:

          exitAlert("真的要退出吗?");

          break;

   }

   return true;

}

// 显示对话框

private void exitAlert(String msg){

   AlertDialog.Builder builder = new AlertDialog.Builder(this);

   builder.setMessage(msg)

          .setCancelable(false)

          .setPositiveButton("确定", new DialogInterface.OnClickListener() {

              public void onClick(DialogInterface dialog, int id) {

                     finish();

              }

          }).setNegativeButton("取消", new DialogInterface.OnClickListener() {

              public void onClick(DialogInterface dialog, int id) {

                     return;

              }

          });

   AlertDialog alert = builder.create();

   alert.show();

}

// 显示对话框

private void aboutAlert(String msg){

   AlertDialog.Builder builder = new AlertDialog.Builder(this);

   builder.setMessage(msg)

          .setCancelable(false)

          .setPositiveButton("确定", new DialogInterface.OnClickListener() {

              public void onClick(DialogInterface dialog, int id) {

              }

          });

   AlertDialog alert = builder.create();

   alert.show();

}

直接在java代码中使用

选项菜单

1.覆盖Activity的onCreateOptionsMenu(Menu menu)方法,第一次打开菜单时该方法被自动跳用

2.调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法设置菜单项图标

3.当菜单项被选择时,覆盖Activity的onOptionsItemSelected()方法来响应事件

public class MainActivity extends Activity {

   private static final int ITEM1 = Menu.FIRST;

   private static final int ITEM2 = Menu.FIRST+1;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

   /**

    * 覆盖该方法添加菜单项

    */

   public boolean onCreateOptionsMenu(Menu menu) {

          menu.add(0, ITEM1, 0, "开始");

          menu.add(0, ITEM2, 0, "退出");

          return true;

   }

    /**

     * 覆盖该方法,响应菜单选项被单击事件

     */

    public boolean onOptionsItemSelected(MenuItem item) {

       switch (item.getItemId()) {

          case ITEM1:

                 setTitle("开始游戏!");

                 break;

          case ITEM2:

                 setTitle("退出!");

                 break;

          }

       return true;

    }

}

上下文菜单

1.覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项(MenuItem).

2.覆盖onContextItemSelected()方法,响应菜单单击事件。

3.调用registerForContextMenu()方法,为视图注册上下文菜单。

public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.main);

   myTV = (TextView)findViewById(R.id.TextView01);

   registerForContextMenu(myTV);

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

          ContextMenuInfo menuInfo) {

   menu.add(0, ITME1, 0, "红色背景");

   menu.add(0, ITME2, 0, "绿色背景");

   menu.add(0, ITME3, 0, "白色背景");

}

@Override

public boolean onContextItemSelected(MenuItem item) {

   switch (item.getItemId()) {

   case ITME1:

          myTV.setBackgroundColor(Color.RED);

          break;

   case ITME2:

          myTV.setBackgroundColor(Color.GREEN);

          break;

   case ITME3:

          myTV.setBackgroundColor(Color.WHITE);

          break;

   }

   return true;

}

子菜单

1.覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项(Sub Menu)

2.调用SubMenu的add()方法,添加子菜单(Sub Menu)

3.覆盖onOptionsItemSelected()方法,响应菜单单击事件

public class MainActivity extends Activity {

   private static final int ITEM1 = Menu.FIRST;

   private static final int ITEM2 = Menu.FIRST+1;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

   /**

    * 覆盖该方法添加子菜单项

    */

   public boolean onCreateOptionsMenu(Menu menu) {

          SubMenu file = menu.addSubMenu("文件");

          SubMenu edit = menu.addSubMenu("編輯");

          file.add(0, ITEM1, 0, "新建");

          file.add(0, ITEM2, 0, "打开");

          return true;

   }

    /**

     * 覆盖该方法,响应菜单选项被单击事件

     */

    public boolean onOptionsItemSelected(MenuItem item) {

       switch (item.getItemId()) {

          case ITEM1:

                 setTitle("新建文件!");

                 break;

          case ITEM2:

                 setTitle("打开文件!");

                 break;

          }

       return true;

    }

<Android>菜单资源的使用的更多相关文章

  1. Android学习笔记菜单资源文件

    创建菜单资源 menu_one.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns: ...

  2. Android菜单项内容大全

    一.介绍: 菜单是许多应用中常见的用户界面组件. Android3.0版本以前,Android设备会提供一个专用"菜单"按钮呈现常用的一些用户操作, Android3.0版本以后, ...

  3. Android应用资源的分类和存储

    Android应用资源可以分为两大类1.无法直接访问的原生资源,保存在asset目录下2.可通过R资源清单类访问的资源,保存在res目录下 Android应用资源的存储/res/anim:存放定义补间 ...

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

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

  5. Android 之 资源文件的介绍及使用

    Android 之 资源文件的介绍及使用 1.资源的简单介绍:  在res文件夹中定义:字符串.颜色.数组.菜单.图片.视频等:在应用程序中使用这些资源.  2.使用资源的长处:降低代码量,同一时候为 ...

  6. 简单的 Android 菜单

    Android 创建简单的菜单 一:上下文菜单: 1.在 res 下创建菜单项资源文夹 menu app->右击res->new->android resourse director ...

  7. Android菜单

    Android菜单概述 菜单是Activity的一个重要组成部分,它为用户操作提供了快捷的途径.Android提供了一个简单的框架来向程序中添加标准菜单 . 一.创建一个菜单资源 你需要在一个XML ...

  8. Android应用资源

    Java刚開始学习的人直接在Java源代码使用"hello" 和123 类型的字符串和整型.但时间长了就会忘记当初定义的原因,有经验的或许会定义字符串常量ResultSet.TYP ...

  9. Android——菜单(Menu)

    菜单的运用在Android中很常见,今天就两节体育课,闲下来也想认真的学一学,正好项目中也会有应用.我是跟着菜鸟教程进行学习的,我相应的粘了一些我自己认为比较重要的,以供方便记录学习. 本章给大家带来 ...

随机推荐

  1. PHP实现openSug.js参数调试

    这是一款利PHP对百度搜索下拉框提示免费代码实现参数配置调试的程序源代码. 由想要对网站进行搜索下拉调试的站长朋友们进行方便.快速的效果演示,具体参考下面的PHP代码. 如何使用? 请新建一份PHP文 ...

  2. Excel2003 去除重复项

    利用 数据透视表 间接 获得 非重复项 1] 选中要去除重复项 的列 数据 2] 3]将选中列移动到 左侧 即可 4] 或者导入到Access中,用sql 语句中的 distinct SELECT D ...

  3. docker-compose入门示例:一键部署 Nginx+Tomcat+Mysql

    整体环境配置 整体环境的配置,如果一个一个 Dockerfile 去写,那么是相当麻烦的,好在 Docker 有一个名为 Docker-Compose 的工具提供,我们可以使用它一次性完成整体环境的配 ...

  4. 从零开始一个http服务器(三)-返回response 构造

    从零开始一个http服务器(三) 代码地址 : https://github.com/flamedancer/cserver git checkout step3 运行: gcc request.h ...

  5. Docker入门系列01

    前两篇写了 Docker 如何安装和相关的概念,当然概念的东西省略了很多,主要是自己水平有限,所以后期会可能增添.但以上内容都是用别人的建好的 镜像(Image) ,这怎么行,我们应该自己动手造轮子, ...

  6. CSS-cascading stle sheets

    CSS-cascading stle sheets 1.      CSS 什么是CSS?CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式 ...

  7. BZOJ2761_不重复数字_KEY

    题目传送门 Map水过(或set也行). code: /************************************************************** Problem: ...

  8. c++ 面向对象程序设计

    1. OOP:概述 2. 定义基类和派生类 3. 虚函数 4. 抽象基类 5. 访问控制与继承 6. 继承中的类作用域 7. 构造函数与拷贝控制 8. 容器与继承

  9. 三、并行流与串行流 Fork/Join框架

    一.并行流概念: 并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流. java8中将并行进行了优化,我们可以很容易的对数据进行并行操作.Stream API可以声明性的通过pa ...

  10. Kubernetes网络方案的三大类别和六个场景

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文章根据网易云资深解决方案架构师 王必成在云原生用户大会上的分享整理. 今天我将分享个人对于网络方案的理解,以及网易云在交付 Kubernetes ...