在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键弹出的菜单,简单的创建选项菜单,代码如下:  

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文件。
        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;
}
}

二、上下文菜单

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

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

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

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

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

  简单示例代码如下:

  

public class MainActivity extends AppCompatActivity {
Button btn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
registerForContextMenu(btn);
} @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"); menu.setGroupCheckable(0, true, true);//设置3个菜单项设为单选菜单项
menu.setHeaderTitle("选择背景颜色"); //设置上下文菜单的标题、图标
// menu.setHeaderIcon(R.drawable.tt); //设置上下文菜单图标
}
} @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 代码

      

<?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>
public class MainActivity extends AppCompatActivity {
Button btn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
registerForContextMenu(btn);
} @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 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. ural 1104,暴力取模

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1104 题目大意:输入一个字符串(数字与大写字母组成),输出n,n满足此字符串为n进制时, ...

  2. vsftp 用无法登陆的用户名登陆(也叫虚拟用户)并进入到自己的文件夹test

    1.不需要使用到PAM认证也可以,useradd redhat; usermod -s /sbin/nologin redhat; passwd redhat. 2.userlist_deny=NO; ...

  3. Spring 的优秀工具类盘点

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  4. 源码安装python

    编译安装新版本python 一般来说python是linux系统的标配,但是版本一般却很老,而系统上面的很多服务可能与老的python存在依赖关系,我们又不能直接卸载.所以一般,我们可以在一个单独的目 ...

  5. 监控windows服务,当服务停止后自动重启服务

    近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下.这里介绍的是windows服务的监控,是通过批处理来实现的.本例是监控wind ...

  6. .Net文件上传--小数据--un

    文件上传控件:FileUpload - 控件,界面+方法+属性Button/LinkButton/ImageButton FileUpload控件:1.SaveAs("要上传到服务器的绝对路 ...

  7. 数据库批量修改表名,增加前缀(SQL server)

    exec sp_msforeachtable @command1=' declare @o sysname,@n sysname select @o=''?'' ,@n=stuff(@o,1,7,'' ...

  8. excel在一个图表内,显示折线图和柱状图

      折线图和柱状图,在同一个图表中拆分显示   一个图,设置主坐标轴 另外一个图,设置次坐标轴     拆分,通过调整纵坐标的最小值和最大值来实现     关于图表的标题,选中图表,选择布局,然后图表 ...

  9. Spring AOP和AspectJ支持

    学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节: ...

  10. [SAP ABAP开发技术总结]列表屏幕

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...