Android中的菜单有如下几种:

OptionMenu:选项菜单,android中最常见的菜单,通过Menu键来调用

SubMenu:子菜单,android中点击子菜单将弹出一个显示子菜单项的悬浮框, 子菜单不支持嵌套,即不能包括其他子菜单

ContextMenu:上下文菜单,通过长按某个视图组件后出现的菜单,该组件需注册上下文菜单

OptionMenu:

public boolean onCreateOptionsMenu(Menu menu):调用OptionMenu,在这里完成菜单初始化

public boolean onOptionsItemSelected(MenuItem item):菜单项被选中时触发,这里完成事件处理

public void onOptionsMenuClosed(Menu menu):菜单关闭会调用该方法

public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示前会调用该方法, 可在这里进行菜单的调整(动态加载菜单列表)

public boolean onMenuOpened(int featureId, Menu menu):选项菜单打开以后会调用这个方法

加载菜单的方式有两种,一种是直接通过编写菜单XML文件,然后调用: getMenuInflater().inflate(R.menu.menu_main, menu);加载菜单

或者通过代码动态添加,onCreateOptionsMenu的参数menu,调用add方法添加 菜单,add(菜单项的组号,ID,排序号,标题),另外如果排序号是按添加顺序排序的话都填0即可

public class MainActivity extends AppCompatActivity {

//1.定义不同颜色的菜单项的标识:

final private int RED = 110;

final private int GREEN = 111;

final private int BLUE = 112;

final private int YELLOW = 113;

final private int GRAY= 114;

final private int CYAN= 115;

final private int BLACK= 116;

private TextView tv_test;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv_test = (TextView) findViewById(R.id.tv_test);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

menu.add(1,RED,4,"红色");

menu.add(1,GREEN,2,"绿色");

menu.add(1,BLUE,3,"蓝色");

menu.add(1,YELLOW,1,"黄色");

menu.add(1,GRAY,5,"灰色");

menu.add(1,CYAN,6,"蓝绿色");

menu.add(1,BLACK,7,"黑色");

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

switch (id){

case RED:

tv_test.setTextColor(Color.RED);

break;

case GREEN:

tv_test.setTextColor(Color.GREEN);

break;

case BLUE:

tv_test.setTextColor(Color.BLUE);

break;

case YELLOW:

tv_test.setTextColor(Color.YELLOW);

break;

case GRAY:

tv_test.setTextColor(Color.GRAY);

break;

case CYAN:

tv_test.setTextColor(Color.CYAN);

break;

case BLACK:

tv_test.setTextColor(Color.BLACK);

break;

}

return super.onOptionsItemSelected(item);

}}

ContextMenu

重写onCreateContextMenu()方法、为view组件注册上下文菜单,使用registerForContextMenu()方法,参数是View、重写onContextItemSelected()方法为菜单项指定事件监听器

menu_context.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">

<!-- 定义一组单选按钮 -->

<!-- checkableBehavior的可选值由三个:single设置为单选,all为多选,none为普通选项 -->

<group android:checkableBehavior="none">

<item android:id="@+id/blue" android:title="@string/font_blue"/>

<item android:id="@+id/green" android:title="@string/font_green"/>

<item android:id="@+id/red" android:title="@string/font_red"/>

</group></menu>

接着我们在选项菜单的那个基础上,添加一个TextView,然后加上下面一些东西:

private TextView tv_context;

tv_context = (TextView) findViewById(R.id.tv_context);

registerForContextMenu(tv_context);

//重写与ContextMenu相关方法

@Override

//重写上下文菜单的创建方法

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenu.ContextMenuInfo menuInfo) {

MenuInflater inflator = new MenuInflater(this);

inflator.inflate(R.menu.menu_context, menu);

super.onCreateContextMenu(menu, v, menuInfo);

}

//上下文菜单被点击是触发该方法

@Override

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.blue:

tv_context.setTextColor(Color.BLUE);

break;

case R.id.green:

tv_context.setTextColor(Color.GREEN);

break;

case R.id.red:

tv_context.setTextColor(Color.RED);

break;

}

return true;

}

 

SubMenu(子菜单)

所谓的子菜单只是在<**item**>中又嵌套了一层<**menu**>而已

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/submenu" android:title="子菜单使用演示~">

<menu>

<group android:checkableBehavior = "none">

<item android:id="@+id/one" android:title = "子菜单一"/>

<item android:id="@+id/two" android:title = "子菜单二"/>

<item android:id="@+id/three" android:title = "子菜单三"/>

</group>

</menu>

</item></menu>

接着我们改下上面上下文菜单的两个方法的内容,换上下面的代码:

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenu.ContextMenuInfo menuInfo) {

//子菜单部分:

MenuInflater inflator = new MenuInflater(this);

inflator.inflate(R.menu.menu_sub, menu);

super.onCreateContextMenu(menu, v, menuInfo);}

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.one:

Toast.makeText(MainActivity.this,"你点击了子菜单一",Toast.LENGTH_SHORT).show();

break;

case R.id.two:

item.setCheckable(true);

Toast.makeText(MainActivity.this,"你点击了子菜单二",Toast.LENGTH_SHORT).show();

break;

case R.id.three:

Toast.makeText(MainActivity.this,"你点击了子菜单三",Toast.LENGTH_SHORT).show();

item.setCheckable(true);

break;

}

return true;}

Popupmenu见https://www.cnblogs.com/XiaoGao128/p/12240792.html

参考资料:菜鸟教程

Android_几种菜单的更多相关文章

  1. Android_三种菜单介绍

    Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu) 一.选项菜单 当用户单击设备上的菜单按钮(Menu),触发事件 ...

  2. Android三种菜单简介

    Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu). 一.选项菜单 用户点击设备上的菜单按钮(Menu),触发事件 ...

  3. SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

    一.个性配置-首页:可以进行拖动保存配置,下次登录时就会按配置的进行加载 二.个人配置页面 7种菜单用户可自定义配置,和预览效果 10种皮肤自定义配置,和预览效果 皮肤和菜单可以随意组合-部分截图: ...

  4. Android 三种菜单(Menu)的实现

    感谢大佬:https://blog.csdn.net/chileme/article/details/82944764 一.常用方法 java onCreateOptionsMenu(Menu men ...

  5. Android的两种菜单

    Android子菜单和选项菜单与上下文菜单的实现 菜单在Android开发中必不可少,可是要怎么实现各种菜单呢?是不是很头疼呢?下面我就来介绍一下: 1. 选项菜单和子菜单的实现 选项菜单:最常规的菜 ...

  6. Android三种菜单的使用方式

    一.选项菜单(OptionMenu) 在res目录下新建menu目录,用于放置菜单布局文件(右键res->new->Android Resource Directory->menu) ...

  7. 基于Metronic的Bootstrap开发框架经验总结(11)--页面菜单的几种呈现方式

    在常规的后台管理系统或者前端界面中,一般都有一个导航菜单提供给用户,方便选择所需的内容.基于Metronic的Bootstrap开发框架,是整合了Metroinc样式,以及Boostrap组件模块的内 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  9. ASP.NET MVC4+EasyUI+EntityFrameWork5权限管理系统——菜单模块的实现(二)

    ASP.NET MVC4+EasyUI+EntityFrameWork5权限管理系统——数据库的设计(一) 菜单和模块是在同一个表中,采用的是树形结构,模块菜单表结构如下代码: USE [Permis ...

随机推荐

  1. Java的开发—面向对象的7大原则之开闭原则(一)

    开闭原则(Open Close Principle) 一.定义: 软件中的(类.模块.函数等等)应该对于扩展是开放的,对于修改时关闭的.意味着一个实体允许在不改变它的源代码的前提变更它的行为 这里的软 ...

  2. 目前最全的Python的就业方向

    Python是一门面向对象的编程语言,编译速度超快,从诞生到现在已经25个年头了.它具有丰富和强大的库,常被称为“胶水语言”,能够把用其他语言编写的各种模块(尤其是C/C++)很轻松地联结在一起.其特 ...

  3. CentOS、Ubuntu的安装

    Linux使用最广泛的2个发行版:CentOS.Ubuntu. CentOS安全性高,常用作企业的服务器,Ubuntu常用作个人桌面. 常见的虚拟机有2个: VM VirtualBox,这个是Orac ...

  4. vue中keepalive怎么理解?​---vue中文社区

    vue中keepalive怎么理解? 说在前面: keep-alive是vue源码中实现的一个组件, 感兴趣的可以研究源码 https://github.com/vuejs/vue/blob/dev/ ...

  5. Excel——排序筛选

    1,自定义排序:多个关键字,从右向左一一排序 * 按颜色排序 * 按自定义序列排序 *两列中,列一个中间数,升序 * 打印标题行 * 选中,定位条件(可见),选择 * 数值筛选(大于等于),文本筛选( ...

  6. Java-利用位数猜年龄

    题目: 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学.一次,他参加某个重要会议,年轻的脸孔引人注目.于是有人询问他的年龄,他回答说:“ ...

  7. cf1037E

    题解:考虑逆序处理询问,用一个set来维护能去的人,每次减少边的时候,维护一下这个set就可以,具体看代码 int main(){ int n, m, k; cin >> n >&g ...

  8. 吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析(完整版)

    # This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...

  9. Python 安装 virturalenv 虚拟环境

    返回目录 本篇索引 一.概述 二.Linux下安装Python虚拟环境 三.Windows下安装Python虚拟环境 一.概述 有时候会在一台主机上安装多个不同的Python版本,用以运行不同时期开发 ...

  10. Keras高层API之Metrics

    在tf.keras中,metrics其实就是起到了一个测量表的作用,即测量损失或者模型精度的变化.metrics的使用分为以下四步: step1:Build a meter acc_meter = m ...