在android 中与menu相关的类有4个:

  Menu:菜单的父窗口,用于创建一个菜单,是subMenu,ContentMenu,MenuItem等的父接口;SubMenuyo用于创建子菜单,ContentMenu用于创建上下文菜单,MenuItem用于创建一个菜单项。

  Menu菜单开发的基本思路:1、用onCreateOptionsMenu(Menu menu)(适用于选项菜单,或者用nCreateContentMenu(ContentMenu contentmenu,View source,ContentMenuInfo info)适用于上下文菜单) 创建菜单,在改方法中调用Menu对象的方法来添加菜单项或者子菜单;2、重写Activity的OnOptionsMenuSelected()(适用于选项菜单,OnContentItemSelected()方法,适用于上下文菜单)方法相应事件。

菜单有3种类型:

一、选项菜单(普通Menu菜单)

  所谓普通Menu菜单即点击手机Menu键弹出的菜单,简单的创建选项菜单,代码如下:  

  1. public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater().inflate(R.menu.mainmenu,menu);//通过xml文件创建菜单,其中R.menu.mainmenu问menu文件加下定义的xml文件。
  1. menu.add(0,0,0,"菜单测试");//用代码添加一个菜单选项
    menu.add(0,1,0,"文本设置");
    SubMenu submenu = menu.addSubMenu(0,6,0,"子菜单测试");//添加一个子菜单
    submenu.add(0,2,0,"我是子菜单1");//添加一个子菜单项
    submenu.add(0,3,0,"我是子菜单2");
    submenu.add(0,4,0,"我是子菜单3");
    return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    //return super.onOptionsItemSelected(item);
    switch(item.getItemId()){
    case 0:
    Toast.makeText(this,"菜单测试",Toast.LENGTH_SHORT).show();
    break;
    case 1:
    Toast.makeText(this,"文本设置",Toast.LENGTH_SHORT).show();
    break;
    case 2:
    Toast.makeText(this,"我是子菜单1",Toast.LENGTH_SHORT).show();
    break;
    case 3:
    Toast.makeText(this,"我是子菜单2",Toast.LENGTH_SHORT).show();
    break;
    default:
    Toast.makeText(this,"我是谁?",Toast.LENGTH_SHORT).show();
    break;
    }
    return true;
    }
    }
  2.  

二、上下文菜单

  当长按某个控件时弹出的菜单称为上下文菜单(类似单击鼠标右键弹出的菜单),必须事先对该控件注册一个上下文菜单,步骤:

  在activity_main.xml文件中添加一个Button,并对其注册上下文菜单。

  1、对要注册上下文菜单的控件注册上下文菜单,例如registerForContextMenu(button);

  2、重写onCreateContentMenu()方法,并在方法内创建菜单项;

  3、重写onContentItemSelected()方法处理菜单点击事件,

  简单示例代码如下:

  

  1. public class MainActivity extends AppCompatActivity {
    Button btn;
  2.  
  3. @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.button);
    registerForContextMenu(btn);
    }
  4.  
  5. @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    // super.onCreateContextMenu(menu, v, menuInfo);
    if (v.getId() == R.id.button) {
    menu.add(0, 0, 0, "上下文菜单测试");
    menu.add(0, 1, 0, "上下文菜单测试1");
    menu.add(0, 2, 0, "上下文菜单测试2");
  6.  
  7. menu.setGroupCheckable(0, true, true);//设置3个菜单项设为单选菜单项
    menu.setHeaderTitle("选择背景颜色"); //设置上下文菜单的标题、图标
    // menu.setHeaderIcon(R.drawable.tt); //设置上下文菜单图标
    }
    }
  8.  
  9. @Override
    public boolean onContextItemSelected(MenuItem item) {
    //return super.onContextItemSelected(item);
    switch (item.getItemId()) {
    case 0:
    Toast.makeText(this, "上下文菜单测试", Toast.LENGTH_SHORT).show();
    break;
    case 1:
    Toast.makeText(this, "上下文菜单测试1", Toast.LENGTH_SHORT).show();
    break;
    case 2:
    Toast.makeText(this, "上下文菜单测试2", Toast.LENGTH_SHORT).show();
    break;
    default:
    break;
    }
    return true;
    }
    }

三、弹出式菜单:

  popUpMenu代表弹出式菜单,它会在指定组件上弹出,会显示在该组件的上方或者下方。感觉功能可以用listDialog替代,不知哪个更好。

Android中创建menu有2种方式:

一、使用xml定义menu

  在res/menu目录中定义菜单文件,如menu1.xml文件,菜单文件必须以<menu>为根节点,<menu>标签没有任何属性,但可以嵌套在<item>中表示子菜单。

  菜单中常用三个标签<menu>、<item>、<group>,

  1.1 <item>表示一个菜单选项,不可以嵌套,有如下几个常用属性:

    1.1.1 id 表示菜单选项的资源ID,

    1.1.2 tittle设置菜单项标题

    1.1.3 Android:icon设置菜单项图标

    1.1.4 Android:checkable,设置菜单项是否可选;

    1.1.5 Android:checked,设置菜单项是否已经选中

    1.1.5Android:visibale设置菜单项是否课件;

  1.2 <group>元素,用于创建一组菜单项,在创建一个子菜单时使用,常用属性

    Android:checkablebehavior设置所属子菜单项是单选还是多选,值可以是“single”等。

  1.3 开发基本路径

    1.3.1 创建xml文件,新建一个AndroidSourcedirection,名字为menu,并建立好xml文件,

    1.3.2 重写Activity的onCreateOptionsMenu()或者OncreateContentMenu()方法,并在方法中通过getMenuInflater().inflate()方法通过XML构建menu,

    1.3.3 重写onoptionselected()方法或者oncontentitemselected()方法相应事件。

   1.4 代码

      

  1. <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id = "@+id/menuid1"
    android:title = "测试1"/>
    <item android:id = "@+id/menuid2"
    android:title = "测试1"/>
    </menu>
  1. public class MainActivity extends AppCompatActivity {
    Button btn;
  2.  
  3. @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.button);
    registerForContextMenu(btn);
    }
  4.  
  5. @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
  6.  
  7. MenuInflater inflator=new MenuInflater(this); //实例化一个MenuInflater对象
    inflator.inflate(R.menu.testmenu, menu); //将xml对应的菜单资源添加到menu中
    //menu.setHeaderIcon(R.drawable.color); //设置上下文菜单图标
    menu.setHeaderTitle("请选择背景颜色"); //设置上下文菜单标题
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
    //return super.onContextItemSelected(item);
    switch (item.getItemId()) {
    case 0:
    Toast.makeText(this, "上下文菜单测试", Toast.LENGTH_SHORT).show();
    break;
    case 1:
    Toast.makeText(this, "上下文菜单测试1", Toast.LENGTH_SHORT).show();
    break;
    case 2:
    Toast.makeText(this, "上下文菜单测试2", Toast.LENGTH_SHORT).show();
    break;
    default:
    break;
    }
    return true;
    }
    }
  
 
 
 
 

Android menu 简单创建的更多相关文章

  1. 【转】Android Studio简单设置

    原文网址:http://ask.android-studio.org/?/article/14 Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以 ...

  2. Android Studio简单设置(转)

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Th ...

  3. Android 实现简单音乐播放器(二)

    在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...

  4. Android课程---Android Studio简单设置

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings-->Appearance-->Theme, ...

  5. android dom方式创建xml

    http://blog.csdn.net/nxh_love/article/details/7085174 在android dom 解析xml方式文章中,简单介绍了dom解析xml的应用.今天在原文 ...

  6. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  7. Android studio 中创建AIDL Service

      1.概述  AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...

  8. Android线程的创建与销毁

    摘要: 在Android开发中经常会使用到线程,一想到线程,很多同学就立即使用new Thread(){...}.start()这样的方式.这样如果在一个Activity中多次调用上面的代码,那么将创 ...

  9. 在Android Studio中创建项目和模拟器

    北京电子科技学院 实      验      报      告 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________  指导老师:娄嘉 ...

随机推荐

  1. Java 期末复习提纲

    Java 开发环境 Java 的特点 面向对象.跨平台.能把中小型程序写成大型程序 开发 Java 的流程 设计类 写代码 重构 Java 程序规范 Javadoc 风格注释 接口以 able 结尾 ...

  2. InputStream和Reader区别

    InputStream,OutputStream  前者为字节输入流,后者为字节输出流.Reader   Writer  前者为字符输入流,后者为字符输出流. 四个均为抽象类.fileInputStr ...

  3. 模块"xxxx.dll"已加载,但对DllRegisterServer的调用失败,错误代码为 XXXXXXXXX

    WIN7.WIN8  注册 卸载dll  报错: 模块"xxxx.dll"已加载,但对DllRegisterServer的调用失败,错误代码为 XXXXXXXXX 解决方法: 若为 ...

  4. flume ng系列之——flume安装

    flume版本:1.5.0 1.下载安装包: http://www.apache.org/dyn/closer.cgi/flume/1.5.0/apache-flume-1.5.0-bin.tar.g ...

  5. 使用JavaScript

    使用JavaScript 1.在HTML中的脚本必须位于<script>和</script>之间,脚本可以被放置在HTML页面的<body>或者<head&g ...

  6. QCom MSM MDP显示驱动一些点的简记

    简要记录了Qualcom MSM8xxx MDP Framebuffer驱动中的一些点. Framebuffer设备的sysfs 330static int msm_fb_create_sysfs(s ...

  7. BZOJ 3202 项链

    题目连接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3202 题意:一个项链由n个珠子组成.每个珠子有三个面,每个面上有一个数字,要求每个 ...

  8. BZOJ 2229 最小割

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2229 题意:给定一个带权无向图.若干询问,每个询问回答有多少点对(s,t)满足s和t的最 ...

  9. Gradle的配置实例

    错过了Maven,但是遇到了Gradle. 网上关于Gradle的讲解和培训已经很多了. 我就直接贴几个我测试过的配置文件吧: ① 依赖maven资源库 repositories { mavenCen ...

  10. git -C

    https://git-scm.com/docs/git -C <path> Run as if git was started in <path> instead of th ...